Тайм-аут переменных сеанса в приложении asp.net

В моем веб-приложении я использую некоторые переменные сеанса, которые устанавливаются при входе в систему:

e.g. Session("user_id") = reader("user_id")

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

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

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


person thegunner    schedule 05.01.2011    source источник


Ответы (4)


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

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

Как перенаправить на страницу входа в систему, когда срок действия сеанса истек (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(); для удаления устаревших данных сеанса перед назначением значений сеанса.

person Kev    schedule 05.01.2011

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

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

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

Увеличение значения времени ожидания сеанса — это параметр в IIS.

person asawyer    schedule 05.01.2011

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

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

или как можно, по крайней мере, увеличить продолжительность времени, в течение которого они доступны?

Он находится в файле web.config в sessionState элемент

person m.edmondson    schedule 05.01.2011

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

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;
    }
}
person Greg    schedule 05.01.2011