Что такое логический и физический сеанс? - PullRequest
1 голос
/ 16 ноября 2011

Это довольно простой вопрос о некоторой концепции.

Каково определение сеанса в контексте веб-сервера, такого как IIS или Apache.Что такое физический и логический сеанс?

Как определить, что сеанс начат или окончен ?Использовать на стороне сервера таймер или что-то еще?

Ответы [ 3 ]

2 голосов
/ 16 ноября 2011

Физически это пространство памяти, используемое для поддержания своего рода состояния соединения между клиентом и сервером.В ASP.NET сессия является уникальной для пользователя;который отличается от Cache, который является пространством памяти, разделяемым между всеми пользователями приложения.

Обычно сеанс поддерживается с помощью файлов cookie (сервер отправляет файл cookie в браузер клиента, содержащий уникальный идентификатор сеанса), но когда браузеры не принимают файлы cookie, он обычно поддерживается с помощью параметров URL-адресаФорма: http://site.com?SessionID=312da312312.Серверы используют этот SessionID для отслеживания того, кто устанавливает соединение.

Логически, Википедия имеет хорошее объяснение концепции:

В информатике,в частности, в сети, сеанс представляет собой полупостоянный интерактивный обмен информацией, также известный как диалог, беседа или встреча, между двумя или более устройствами связи или между компьютером и пользователем (см. сеанс входа в систему).Сеанс устанавливается или устанавливается в определенный момент времени и прерывается в более поздний момент времени.Установленный сеанс связи может включать более одного сообщения в каждом направлении.Сеанс обычно, но не всегда, с состоянием, что означает, что по крайней мере одна из взаимодействующих частей должна сохранять информацию об истории сеанса, чтобы иметь возможность общаться, в отличие от связи без сохранения состояния, где связь состоит из независимых запросов сответы.

Установленный сеанс является основным требованием для установления связи с установлением соединения.Сеанс также является основным этапом передачи в режимах связи без установления соединения.Однако любая однонаправленная передача не определяет сеанс 1 .

2 голосов
/ 16 ноября 2011

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

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

Логически , ASP.NET имитирует сеанс, распознавая повторяющиеся вызовы пользователя на сайт и сохраняя информацию о состоянии сеанса между вызовами.

Это достигается путем назначения уникального токена («идентификатора сеанса») каждому пользователю в файле cookie при первом обращении к сайту.Каждый раз, когда пользователь вызывает сайт, он представляет файл cookie.ASP.NET распознает его и вызывает все сохраненные данные сеанса для этого токена с постоянного носителя (ASP.NET сохраняет их на стороне сервера, либо в памяти, на сервере состояний или в базе данных SQL).Приложение может считывать и изменять данные сеанса в течение срока действия HTTP-запроса, обычно в ответ на действия пользователя.В конце запроса данные сеанса возвращаются на постоянный носитель.

Таким образом сохраняется иллюзия открытого непрерывного сеанса.Легко судить о начале сеанса - это первый раз, когда пользователю предоставляется токен, а запись сеанса сохраняется на постоянном носителе с отметкой времени.Нет простого ответа относительно того, когда именно заканчивается сессия, потому что HTTP естественным образом не имеет состояния.Поэтому мы должны предположить, что сессия должна быть закрыта по истечении заданного промежутка времени без возврата пользователя на сайт.Это может быть реализовано только по истечении срока действия cookie или путем удаления записи сеанса с носителя постоянных данных путем сравнения с метками времени в данных сеанса с использованием произвольного времени ожидания по нашему выбору.Значение по умолчанию в ASP.NET составляет 20 минут.

Интересным моментом является то, что при использовании SQL Server в качестве среды персистентности сеансов ASP.NET он использует запланированную задачу агента SQL Server для очистки истекших сеансов.Однако, если агент не запущен или не поддерживается (например, в случае выпуска SQL Server Express), сеансы с истекшим сроком не очищаются, и поэтому сеансы не завершатся, пока пользователь продолжает представлять один и тот же маркер сеанса.На практике сеанс заканчивается, когда пользователь закрывает свой браузер, потому что cookie должен затем автоматически удаляться.

Однако, чтобы ответить на ваш конкретный вопрос, обратите внимание, что я говорил о сеансах вконтекст сервера приложений (ASP.NET).Веб-сервер (IIS) вообще не имеет представления о сессиях - единственная роль, которую он играет, заключается в обслуживании и чтении файлов cookie, когда он передает запросы в ASP.NET.

0 голосов
/ 16 ноября 2011

Вот MSDN ссылка

По сути, есть 3 разных способа хранения сессии. В процессе / State Server / SQL.

В процессе сохраняется в IIS и теряется, если вы перезапустите или перезапустите свой веб-сервер. Это самый быстрый, но он не сохраняется.

Сервер состояний: это рабочий процесс вне процесса, который не привязан к вашему приложению .NET. Однако, если ваш сервер перезагружен, вы теряете этот сеанс, но вы можете перезапустить пул приложений

SQL: хранится в SQL и сохраняется постоянно.

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