2011-01-20 3 views
0

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

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

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

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

+5

Этот код не имеет ничего общего с куки-файлами или сеансами. –

+0

Я знаю, все, что я насыщал, состояло в том, что это «SEEMED», чтобы сохранить cookie sesion от пребывания на клиенте. – DDiVita

+0

Как я уже говорил, этот код не имеет ничего общего с куки-файлами или сеансами. Это совершенно бессмысленно для этого вопроса, и его следует удалить. –

ответ

0

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

3

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

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

+0

Я понимаю, что, но TRUST me, сайт настроен для процесса, и я ничего не пропускаю в URL-адресе. – DDiVita

+0

@DDiVita - если вы говорите правду, тогда вы должны ошибаться в сохранении состояния сеанса. Попробуйте поместить код, который Cognitronic опубликовал на странице WebForm и просматривает; посмотрите, прекращено ли ваше состояние сеанса. Если нет, то вы вообще не говорите о состоянии ASP.NET 'Session'. –

+0

Если я выйду из системы и вызову Session.Abandon, сеансы будут очищены. В обоих браузерах. Итак, в моем событии выхода я называю сессию.Отказаться от IE. Если я перейду в FF, это и обновится, я вернусь на страницу входа. Итак, сеансы wokring, просто не так, как я привык. Я просто не понимаю. – DDiVita

1

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

HttpContext.Current.Session.Clear(); 
HttpContext.Current.Response.Cookies.Clear(); 
+0

Хотя этот код будет работать, это может быть не полезно для этого вопроса, потому что здесь нет контекста, в котором этот код может быть вызван. Он говорит об отказе от сеанса, который не включает явный вызов кода. ** Но ** этот код может помочь определить, является ли это состояние сеанса, что является проблемой здесь в первую очередь (если этот код не очищает его, то это не «сеанс») –

Смежные вопросы