Ответ 1
ASP.NET использует cookie для отслеживания пользователей. Когда вы пытаетесь сначала написать что-то на сеанс, cookie отправляется клиенту, что-то вроде ASP.NET_SessionId
. Этот файл cookie отправляется клиентом при последующих запросах. Благодаря этому файлу cookie сервер может идентифицировать клиента и записывать/читать связанные данные сеанса. Важно отметить, что этот файл cookie не является постоянным (не сохранился перезапуск браузера) и испускается с флагом HttpOnly, что означает, что клиент сценарии не могут получить к нему доступ.
В дополнение к файлам cookie вы также можете настроить ASP.NET для использования скрытых полей или добавить идентификатор сеанса к строке запроса для каждого запроса.
Итак, основная идея сеанса заключается в том, что фактические данные хранятся где-то на сервере, и клиент отправляет некоторый идентификатор по каждому запросу, чтобы сервер мог знать, где его найти.
По умолчанию есть 3 места, где могут храниться фактические данные сеанса:
- In-Proc: сеанс хранится в памяти приложения (быстрее, но если у вас несколько серверов в ферме серверов, это не сработает)
- Out-of-Proc: данные хранятся на отдельном сервере, на котором установлена государственная служба (данные хранятся в памяти отдельного компьютера, что означает, что несколько веб-серверов могут работать в веб-ферме).
- SqlServer: данные хранятся в SQL Server (это самый медленный, но самый надежный, поскольку данные сеанса хранятся в базе данных SQL Server и могут работать, если сбой сервера сеанса, который не относится к Out-Of-Proc)
- Пользовательская реализация: благодаря расширяемости ASP.NET вы можете написать собственный поставщик сеансов и хранить данные там, где вам нравится.
Вот хорошая статья о MSDN, которая исследует состояние сеанса ASP.NET.