2011-01-05 6 views
7

В моем веб-приложении я использую некоторые переменные сеанса, которые устанавливаются при входе в систему:session variables timeout в asp.net app

например. Session("user_id") = reader("user_id")

Я использую это через свое приложение.

Когда переменная сеанса заканчивается, это вызывает ошибки, главным образом при подключении к базе данных, поскольку для некоторых запросов требуется session("user_id").

Как настроить переменные сеанса так, как только они будут отправлены на страницу входа в систему или как можно увеличить время?

ответ

11

Я угадываю вы используете проверки подлинности форм. Трюк здесь состоит в том, чтобы гарантировать, что ваша проверка подлинности на основе форм истечет до сеанса.

Я писал об этом в этом ответе здесь:

How to redirect to LogIn page when Session is expired (ASP.NET 3.5 FormsAuthen)

Например:

Настройте вашу проверку подлинности форм - это задает время ожидания до 60 минут:

<authentication mode="Forms"> 
    <forms defaultUrl="~/Default.aspx" 
     loginUrl="~/Login.aspx" 
     slidingExpiration="true" 
     timeout="60" /> 
</authentication> 

Продление срока действия сеанса в течение длительного времени:

<sessionState 
    mode="InProc" 
    cookieless="false" 
    timeout="70"/> 

В вашем Login.aspx коде позади вас также может сделать Session.Clear(); удалить устаревшие данные сеанса перед присвоением значения сеанса.

1

В прошлом я использовал базовую страницу или главную страницу на каждой странице (делая исключение для страницы входа), которая читает токен сеанса, чтобы узнать, зарегистрирован ли пользователь в настоящее время.

Если он когда-либо читает нуль, он сохраняет текущий URL-адрес и перенаправляется на страницу входа.

После входа в систему он считывает сохраненный URL-адрес и перенаправляет пользователя обратно на запрошенную страницу.

Увеличение значения тайм-аута сеанса - это настройка в IIS.

1

Как я могу установить свои переменные сессии, так что, как только они таймаут, чтобы перейти на страницу входа

Проверьте, если они = нуль сделать Response.Redirect("Home.aspx");

или как может по крайней мере, увеличить время ?

Его в web.config в пределах sessionState элемента

0

Я думаю, что многие люди завершают свои сеансовые вызовы, чтобы создать шаблон «ленивой нагрузки».Что-то вроде этого:

class SessionHelper 
{ 
    public static string GetUserId() 
    { 
     string userId = (string)System.Web.HttpContext.Current.Session["UserId"]; 

     if(userId == null) 
     { 
      userId = reader("UserId"); 
      System.Web.HttpContext.Current.Session["UserId"] = userId; 
     } 

     return userId; 
    } 
}