Я работаю над настройкой / исправлением моего кода тайм-аута сеанса и изучил множество статей, таких как эта и эта публикация SO , чтобы узнать, как лучше всего это сделать.Решение для обнаружения тайм-аута сеанса, который я продолжаю видеть снова и снова, состоит в том, чтобы сначала проверить свойство Session.IsNewSession на true, а если да, то проверить, существует ли уже куки-файл сеанса.Я предполагаю, что логика заключается в том, что пользователь закончил свой последний сеанс с истекшим временем ожидания, начал новый сеанс, но старый cookie еще не был удаленКод для этих проверок выглядит следующим образом:
if (Context.Session != null)
{
if (Session.IsNewSession)
{
string szCookieHeader = Request.Headers["Cookie"];
if ((null != szCookieHeader) && (szCookieHeader.IndexOf("ASP.NET_SessionId") >= 0))
{
Response.Redirect("sessionTimeout.htm"); // or whatever code to handle timeout
}
}
}
Сейчас я работаю со значением времени ожидания сеанса 120 минут и значением времени ожидания форм 60 минут.Эти две строки из моего файла web.config, соответственно, находятся здесь:
<sessionState mode="InProc" cookieless="UseDeviceProfile" timeout="120" />
<authentication mode="Forms">
<forms loginUrl="~/Home/Customer" timeout="60" name=".ASPXAUTH" requireSSL="false" slidingExpiration="true" defaultUrl="~/Home/Index" cookieless="UseDeviceProfile" enableCrossAppRedirects="false"/>
</authentication>
Итак, через 60 минут (я установил 1 для проверки), я делаю запрос к серверу, и яЯ полагаю, что автоматически перенаправляется в / Home / Customer из-за значения loginURL в моей строке web.config.
Проблема в том, что сеанс не заканчивается, и все мои проверки тайм-аута сеанса находятся в действии Домой / Клиент (я использую MVC).Таким образом, я перенаправлен на Home / Customer и выполняю описанные выше проверки, но когда я добираюсь до Session.IsNewSession, он ложный, потому что сессия все еще жива (я предполагаю, что я все еще в течение 120 минут, которые у меня есть)задано).
Итак, наконец, мой вопрос.Вся эта схема проверки тайм-аута сеанса работает только тогда, когда истекает время Session ?Или я могу заставить его работать на тайм-ауты Forms ?Может быть, решение состоит в том, чтобы установить значение тайм-аута моего сеанса так же, как значение тайм-аута форм?