Время ожидания сеанса на стороне сервера в ядре asp.net 2.1 - PullRequest
0 голосов
/ 07 ноября 2018

Мне нужно что-то сделать на Окончание сеанса Событие. Как я могу получить доступ к этому событию? что-нибудь похожее на это событие может быть тайм-аут?

Ответы [ 2 ]

0 голосов
/ 07 ноября 2018

Единственный способ справиться с этим в ASP.NET Core - при загрузке страницы на стороне клиента (в коде JS), чтобы запланировать таймер для тайм-аута сеанса и предупредить пользователя, когда он близок к истечению. Если пользователь отвечает - пропингует серверную часть (чтобы обновить сеанс) или перенаправляет пользователя на страницу выхода из системы. Время ожидания вашего сеанса может быть настроено в Startup классе. Таким образом, вам нужно передать то же значение в представление клиента, настроить таймер (допустим, это 20 минут), чтобы показывать пользователю модальное значение через 19 минут с таймером обратного отсчета на минуту и ​​кнопкой типа «Оставаться в сети». Когда пользователь нажимает кнопку - выполните AJAX вызов на стороне сервера (какое-либо действие Ping в вашем Home контроллере или что-то в этом роде).

0 голосов
/ 07 ноября 2018

ASP.NET имеет событие Session_OnEnd, которое можно зарегистрировать в Global.asax, но даже тогда оно было крайне ненадежным: его можно было использовать только с внутрипроцессными сессиями, и оно могло отслеживать только время истечения сеанса, а не когда пользователь делает что-то вроде закрытия окна браузера.

В ASP.NET Core нет ничего похожего, в основном потому, что это не имеет смысла. Больше всего ASP.NET Core предназначен для масштабирования, что-то in-proc что-либо является полной противоположностью. Хранилище сессий распространяется по умолчанию. Даже когда вы используете сеансы в памяти, он все еще использует реализацию IDistributedCache. Распределенное хранилище сеансов делает мониторинг истечения срока действия невозможным, поэтому такая функциональность не была добавлена.

Более того, сеансы не истекли активно. Вместо этого, когда пользователь в следующий раз отправляет обратно cookie сеанса, после того как сеанс истекает, сеанс уничтожается и создается новый сеанс. Также сеансы используют скользящие истечения, поэтому, пока пользователь остается активным в пределах окна тайм-аута, сеанс фактически никогда не истечет.

Короче говоря, то, что вы ищете, невозможно. Тем не менее, это действительно проблема крика XY. У вас есть какая-то проблема, которую вам нужно решить (X), и вы решили, что способ решить ее - это сделать что-то по истечении сеанса (Y). Тем не менее, вы не можете понять, как сделать Y, так что вы задаете вопрос о Y, когда вы действительно должны спрашивать о X. Я бы предложил создать новый вопрос о фактическом проблема, которую нужно решить; вероятно, есть лучший способ.

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