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