По умолчанию срок действия сеанса составляет 20 минут.
Обновление: я не хочу, чтобы сеанс истекал до закрытия браузера.
Update2: это мой сценарий. Пользователь авторизуется на сайте. Играет по сайту. Оставляет компьютер в душе (> 20 минут;)). Возвращается к компьютеру и должен может поиграться. Он закрывает браузер, который удаляет cookie сеанса. В следующий раз, когда он зайдет на сайт из нового экземпляра браузера, ему потребуется снова войти в систему.
В PHP я могу установить session.cookie_lifetime в php.ini равным нулю, чтобы добиться этого.





Это по умолчанию. Когда у вас есть сеанс, он сохраняет сеанс в «cookie сеанса», который автоматически удаляется при закрытии браузера.
Если вы хотите иметь сеанс между двумя сеансами браузера, вы должны установить Cookie.Expired на дату в функции.
Поскольку сеанс, о котором вы говорите, хранится на сервере, а не на клиенте, вы не можете делать то, что хотите.
Но рассмотрите возможность не использовать сеанс на стороне сервера ASP.NET, а вместо этого полагаться только на файлы cookie.
Невозможно явно очистить сеанс, если вы каким-либо образом не общаетесь между клиентом и сервером в момент закрытия окна, поэтому я бы ожидал отправки специального запроса URI для очистки сеанса в момент получения окна закрыть сообщение.
Мой Javascript недостаточно хорош, чтобы дать вам реальные инструкции для этого; Извини :(
Вы не можете, так как вы не можете контролировать ответ клиента html.
Собственно зачем вам это нужно? Если никто не сможет возобновить сеанс, он истечет через 20 минут. Если ресурсы имеют значение, установите более агрессивное истечение срока действия сеанса (большинство хостинговых компаний сделали это, что ужасно раздражает) или используйте меньше объектов в сеансе. Старайтесь избегать любых объектов, вместо этого просто храните ключи для их получения, это очень важный дизайн, поскольку он помогает вам масштабировать сеанс до сервера состояний, когда вы становитесь большим.
К сожалению, из-за явного характера Интернета и отсутствия постоянной связи между сервером веб-сайта и браузером пользователя невозможно определить, когда пользователь закрыл свой браузер. Есть события и JavaScript, которые вы можете реализовать (например, onunload), которые вы можете использовать для обратного вызова на сервер, который, в свою очередь, может «убить» сеанс - Session.Abandon();
Вы можете установить продолжительность сеанса в файле web.config, помните, что этот тайм-аут основан на времени, прошедшем с момента последнего обращения к серверу браузером пользователя.
Тайм-аут браузера не добавлялся.
Вы можете установить короткий тайм-аут сеанса (например, 5 минут), а затем заставить страницу периодически опрашивать сервер, либо используя Javascript для запуска XmlHttpRequest каждые 2 минуты, либо имея скрытый iframe, который указывает на страницу, которая обновляется каждые 2 минуты. 2 минуты.
Как только браузер закроется, сеанс довольно быстро завершится по таймауту, так как ничто не сможет его поддерживать.
Это не новая проблема, есть несколько сценариев, которые необходимо обработать, если вы хотите уловить все способы завершения сеанса, вот общие примеры некоторых из них:
Первые два элемента должны обрабатываться клиентом, отправляющим информацию на сервер, обычно вы должны использовать javascript для перехода на страницу выхода, которая быстро завершает сеанс.
Третий и четвертый элементы обычно обрабатываются установкой тайм-аута состояния сеанса (это может быть любое количество времени). Количество времени, которое вы используете, основано на поиске значения, которое позволяет пользователям использовать ваш сайт, не перегружая сервер. Очень приблизительное эмпирическое правило: 30 минут плюс-минус 10 минут. Однако соответствующее значение, вероятно, должно было бы стать темой другого сообщения.
Пятый элемент обрабатывается в зависимости от того, как вы храните свои сеансы. Сеансы, сохраненные в состоянии, не выдержат перезагрузки, поскольку они находятся в оперативной памяти компьютера. Сессии, хранящиеся в базе данных или cookie, переживут перезагрузку. Вы можете справиться с этим так, как считаете нужным.
По моему ограниченному опыту, когда эта проблема возникала раньше, было определено, что достаточно просто установить для тайм-аута сеанса приемлемое значение. Однако это можно сделать.
Поправьте меня, если я неправильно понимаю смысл вашего вопроса, но основной вопрос, похоже, меньше связан с тем, как принудительно завершить сеанс, когда пользователь закрывает браузер, и больше о том, как предотвратить завершение сеанса до закрытия браузера.
Я думаю, что реальный ответ на этот вопрос - переоценить то, для чего вы используете сеансы. Если вы используете их для поддержания состояния, я согласен с другими ответами, что вам может не повезти.
Однако предпочтительным подходом является использование механизма постоянного состояния с той же областью действия, что и сеанс браузера, например файла cookie, срок действия которого истекает при закрытии браузера. Этот файл cookie может содержать достаточно информации, чтобы повторно инициировать сеанс на сервере, если он истек с момента последнего запроса. В сочетании с относительно коротким (5-10 минут) тайм-аутом сеанса, я думаю, это дает вам лучший баланс между использованием ресурсов сервера и не заставляет пользователя постоянно «перезагружать» сайт.
Если вы хотите продлить сеанс более чем на 20 минут, вы измените значение по умолчанию с помощью администратора IIS или можете установить его в файле web.config. Например, чтобы установить тайм-аут 60 минут в web.config:
<configuration>
<system.web>
<sessionState timeout = "60" />
... other elements omitted ...
</system.web>
... other elements omitted ....
</configuration>
Вы можете сделать то же самое для конкретного пользователя в коде с помощью:
Session.Timeout = 60
Какой бы метод вы ни выбрали, вы можете изменить время ожидания на любое значение, которое, по вашему мнению, является разумным, чтобы позволить вашим пользователям заниматься другими делами и при этом поддерживать свой сеанс.
Конечно, есть и недостатки: для пользователя существует возможная проблема безопасности, заключающаяся в том, что браузер остается без присмотра и остается в системе, когда кто-то другой начинает его использовать. Для вас существует проблема использования памяти на сервере - чем дольше длится сеанс, тем больше памяти вы будете использовать одновременно. Имеет ли это значение, зависит от нагрузки на ваш сервер.
Если вы не хотите угадывать разумный увеличенный тайм-аут, вам нужно будет использовать один из других уже предложенных методов, требующий некоторого JavaScript, запущенного в браузере, чтобы периодически проверять связь с сервером и / или прекращать сеанс, когда страница выгружается. (конечно, при условии, что пользователь не перейдет на другую страницу вашего сайта).
Ой, вы переписали вопрос.
Это абсолютно возможно, пока жив javascript. Используйте любой синхронизированный ajax. Проверьте с помощью библиотеки прототипов http://www.prototypejs.org PeriodicalExecutor или jQuery с помощью плагина таймера ajax +. Настройте фиктивную страницу, которую ваш исполнитель будет время от времени вызывать, чтобы ваш сеанс всегда был активен, если только он не выйдет из системы (одновременно убьет таймер ajax) или закроет браузер (что означает, что исполнитель все равно убит)