Закрытие браузера должно на самом деле очистить переменные сеанса идентификатор сессии ASP.net - PullRequest
4 голосов
/ 13 ноября 2008

У меня есть страница ASP.net. Когда я закрываю веб-страницу, мне нужно очистить переменные сеанса.

Как справиться с этим, мне нужно поддерживать время ожидания до 20 минут. Если он закрывается и входит в систему сколько угодно раз в течение 20 минут тайм-аута

Есть ли возможность очистить идентификатор сессии ASP.net

Ответы [ 6 ]

11 голосов
/ 13 ноября 2008

Вы не можете сделать это.

  1. Вы не можете рассчитывать на событие, происходящее в браузере
  2. Сервер никак не может связаться с браузером, чтобы узнать, жив ли он

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

window.onbeforeunload запускается при каждой выгрузке страницы. Даже если пользователь переходит на другую страницу на вашем сайте, он может снова нуждаться в вашем сеансе.

5 голосов
/ 13 ноября 2008

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

Javascript не очень хороший вариант, так как вы можете отключить его на стороне клиента.

5 голосов
/ 13 ноября 2008

[РЕДАКТИРОВАТЬ] Как и другие предлагали, ваш сеанс должен в конечном итоге истечь, но если вы хотите закрыть сеанс до истечения времени ожидания (например, для очистки больших объектов сеанса) И иметь доступный вам JavaScript ...

Это можно сделать с помощью обработчика window.onbeforeunload, который отправляет обратно на страницу выхода.

function CloseSession( )
{
    location.href = 'SignOut.aspx'; 
}
window.onbeforeunload = CloseSession;

Вы также можете сделать это через AJAX. Страница SignOut.aspx (или любая используемая вами платформа) должна прервать сеанс пользователя.

2 голосов
/ 13 ноября 2008

Что если процесс браузера завершится?

Здесь это трюк

У вас не должно быть столько переменных сеанса, чтобы они требовали очистки. См. этот пост для других вариантов.

0 голосов
/ 18 ноября 2013

Здравствуйте, попробуйте эту функцию JavaScript

function ConfirmClose()  
{  
if (event.clientY < 0)  
{  
      /* Your asynchronouse request to the page and call that function*/ 
}  
}
/*now call this method on event of javascript*/      

я этого не замечал, но это только что вышло из головы

0 голосов
/ 13 ноября 2008

Я не знаю конкретно, как ASP.Net реализует свои сеансы, но частью RFC о файлах cookie является то, что сеансовые файлы cookie (без определенной даты окончания срока действия) удаляются всякий раз, когда браузер закрывается.

Конечно, есть способ получить ASP.Net, используя правильные сеансовые куки, а не те, которые имеют фиксированный тайм-аут?

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