Как определить, истек ли срок действия SessionState? - PullRequest
2 голосов
/ 09 ноября 2010

Как лучше всего определить, умер ли SessionState, чтобы отправить пользователя на страницу «Session Expired»? Я успешно настроил приложение (в Web.config), чтобы сделать это, когда cookie-файл аутентификации пропал (есть настройка для этого), но до сих пор я не нашел эффективного способа сделать что-то подобное, когда SessionState ушел Данное приложение хранит некоторые данные в Session и должно предоставить пользователю страницу «Session Expired - Пожалуйста, войдите снова», если какая-либо из них пропала.

Пока что единственный вариант, который я могу себе представить, это сделать в каждом из мест, к которым у меня есть доступ Session, но это явно не оптимальное решение.

Ответы [ 6 ]

4 голосов
/ 09 ноября 2010

Я помню похожий вопрос.На самом деле у вас не так много возможностей.

Я имею в виду, вы не можете перенаправить пользователя на страницу, когда сервер запускает событие SessionEnd, которое вы можете обработать в Global.asax.

Однако, если вы играете с объектом Session изнутри страницы, вы можете сделать что-то полезное ... Например, сохранить идентификатор сеанса в контексте страницы или в скрытом поле.При обратной передаче сравните сохраненный идентификатор с идентификатором сеанса.Если они различаются, начинается новый сеанс, то есть срок действия старого истек.

Теперь пришло время перенаправить пользователя:)

Надеюсь, что он помог.

3 голосов
/ 09 ноября 2010

Да, это сложно. :)

Нет реального простого / окончательного способа сделать это.

Один из вариантов - вставить guid / idenfitier в коллекцию Session [] во время Session_Start (global.asax), а затем проверить это значение в Page_Load вашей базовой страницы (например, master).

Другой вариант - проверить файл cookie ASPX:

HttpCookie sessionCookie = Request.Cookies["ASP.NET_SessionId"];

Если он нулевой, сеанс окончен.

1 голос
/ 09 ноября 2010

в интернете есть множество примеров, чтобы решить вашу проблему (это довольно часто)

взгляните на

http://geekswithblogs.net/shahed/archive/2007/09/05/115173.aspx

1 голос
/ 09 ноября 2010

Когда клиент входит в систему, вы задаете ему флаг сеанса, например notexpired, и устанавливаете его равным 1.

Затем вы пишете веб-модуль, который при каждом запросе http проверяет, если notexired = 1. Еслиэта проверка выдает исключение или равна 0, вы можете отказать в доступе или перенаправить на страницу ошибки.

или вы можете возобновить сеанс из базы данных, если вы сохраните сеансы в базе данных.

Кстати, это также работает с обработчиками AJAX, в отличие от хаков классов базовой страницы.

1 голос
/ 09 ноября 2010

Почему бы не включить проверку сеанса на главной странице?Любая из ваших переменных сеанса вернет ноль, если сессия истекла.Таким образом, на page_load вы можете проверить любой из них и выполнить соответствующее действие, например Response.Redirect.Однако вы говорите в Web.Config, что вы можете проверить, когда файл cookie аутентификации пропал, поэтому вы не можете выполнить какое-либо действие для этого?

Другой способ - использовать HTTP-модуль который будет перехватывать каждый запрос и решать, что с ним делать.Это было бы лучше, чем мой первый метод, и это произойдет до любой обработки страницы.

0 голосов
/ 12 сентября 2014

Другой способ - проверить, поддерживаются ли значения сеансов репозитория.В моем случае у нас есть хеш-таблица, и мы записываем идентификатор сеанса, а затем каждый раз, когда нам нужен этот сеанс, мы проверяли, все ли там значение. Это централизованный способ держать ваше приложение в состоянии вашего сеанса. Надеюсь, это поможет /

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...