Переменные сеанса Asp.Net не закрываются при закрытии окна браузера? - PullRequest
0 голосов
/ 20 января 2011

Это странная проблема, и я не уверен, что происходит. Я использую IIS7 и .net 4.0, чтобы быть.

Казалось, что сессионные куки не могут остаться на клиенте после закрытия браузера. Другое странное, что я могу закрыть IE и открыть FireFox, и сессия тоже там. КАК ТАК? Я думаю, что так настроена моя среда. У меня есть сессии, установленные для InProc и использующие куки в IIS. Чем отличается IIS7?

Обновление: я использую интегрированный режим для своего пула приложений. Я посмотрел старый сайт, созданный с использованием .net 3.5 и iis6, работающий на Sever2003. Я могу войти на сайт, и он создаст для меня переменную сеанса. Затем я захожу в FireFox и открываю тот же сайт. Это требует, чтобы я вошел в систему (мое приложение перенесет вас в ваш prfile, если сеанс существует). Если я затем закрою IE и снова открою IE, а затем вернусь на свой сайт, мне потребуется снова войти в систему. То, что происходит с iis7 и моим текущим приложением, довольно странно. Единственная разница в том, как тянется мой сеанс, заключается в том, что я получаю переменную при приведении текущего обработчика к объекту Page: (Page) HttpContext.Current.Handler

Обновление: хорошо, я думаю, что я нашел, где проблемы, и это имеет отношение к приведению HttpContext.Current.Handler к текущему объекту страницы. У меня есть файл конфигурации, в который я хотел поместить свойство, чтобы все другие классы могли ссылаться на центральную точку, чтобы получить созданный мной объект сеанса пользователя. HttpContext.Current.session всегда был нулевым, и кто-то предложил использовать HttpContext.Current.Handler. Я создал простую страницу, которая проверяет, был ли создан сеанс varaible, и если нет, то он его создает. Затем я распечатываю значение. Когда я закрываю браузер, сеанс ушел. Итак, это работает. Код, который я изначально написал в этом сообщении, был действительно для кнопки «назад», но мне не нужна эта благодарность за то, что Эндрю указал на это. Так что, я думаю, неясно, почему этот сеанс, извлеченный из Hnadler, всегда доступен, пока я не очищу его специально.

Ответы [ 3 ]

3 голосов
/ 20 января 2011

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

Session_OnEnd запускается только для состояния сеанса InProc.Единственный способ для IE и Firefox делиться сессиями - это сеансы без файлов cookie, где идентификатор сессии встроен в URL, и вы копируете URL между браузерами.

1 голос
/ 20 января 2011

Попробуйте очистить сессию:

 HttpContext.Current.Session.Clear();
 HttpContext.Current.Response.Cookies.Clear();
0 голосов
/ 26 января 2011

Ну, я так и не получил ответ на этот вопрос и все еще не уверен, почему HttpContext.Current.Handler всегда держался за мою сессию.Итак, я закончил тем, что изменил настройки и получил переменную Session.Спасибо всем за внимание.

...