Сохраняется ли сессия на стороне клиента или на стороне сервера - PullRequest
36 голосов
/ 12 июля 2011

Мне было интересно, если HttpContext.Session использует куки для хранения данных. Коллега по работе сказал мне, что на мобильном сайте телефоны, как правило, не содержат куки, и поэтому у вас нет сессии. Я всегда думал, что сессия - это данные, которые хранятся на стороне сервера и не зависят от объектов на стороне клиента. Пожалуйста, объясните, если я не прав.

Я прочитал это .

Ответы [ 5 ]

53 голосов
/ 12 июля 2011

в ASP.NET; у вас есть файл cookie сеанса. Этот файл cookie используется для определения , какой сеанс принадлежит вам; но на самом деле не содержит информацию о сеансе.

По умолчанию ASP.NET будет хранить информацию о сеансе в памяти внутри рабочего процесса (InProc), обычно w3wp.exe. Существуют и другие режимы хранения сеансов, такие как Out of Proc и SQL Server.

ASP.NET по умолчанию использует куки; но может быть настроен так, чтобы он был «без печенья», если он вам действительно нужен; который вместо этого хранит ваш идентификатор сессии в самом URL. Это обычно имеет несколько недостатков; такие как обслуживание ссылок, затрудняются, люди создают закладки для URL с идентификаторами сеансов с истекшим сроком (поэтому вам нужно обрабатывать идентификаторы сеансов с истекшим сроком и т. д.). Большинство современных телефонов, даже не смартфонов, поддерживают файлы cookie. Старые телефоны не могут. Нужно ли вам поддерживать сеансы без файлов cookie, решать только вам.

Если ваш URL выглядел так:

http://www.example.com/page.aspx

URL без файлов cookie будет выглядеть следующим образом:

http://www.example.com/(S(lit3py55t21z5v55vlm25s55))/page.aspx

Где lit3py55t21z5v55vlm25s55 - идентификатор сеанса.

Подробнее о состоянии сеанса ASP.NET можно узнать здесь

25 голосов
/ 12 июля 2011

Данные сеанса хранятся на сервере, но они также сохраняют строку идентификатора в файле cookie для идентификации пользователя.

Если файлы cookie не поддерживаются, строка идентификатора не может быть сохранена, иСервер не может связать сеанс, когда пользователь делает другой запрос.

Идентификатор сеанса - это просто число, сгенерированное сервером (из счетчика или случайным образом), поэтому он не содержит никакой информации изданные, которые вы сохраняете в объекте сеанса.

(Приложение также можно настроить для помещения сеанса в URL-адрес, а не в файл cookie. Это позволяет использовать сеансы без файлов cookie, но разрушает ваши приятные URL-адреса..)

15 голосов
/ 28 августа 2013

В настоящее время это может быть и другое.

Сеанс сервера

Сеанс на стороне сервера уже описан в других публикациях.Сеанс хранится на сервере, но ему нужен файл cookie для хранения индикатора того, кто запрашивает значение сеанса.

Сеанс клиента

Новая концепция WebStorage, определенная W3C показывает, как сегодня нужен сеанс на стороне клиента.Вот HTML5-реализация WebStorage: https://code.google.com/p/sessionstorage/

3 голосов
/ 12 июля 2011

Это сложный вопрос в некотором смысле, так как это немного и то и другое.

Состояние сеанса само хранится на сервере. Но вам нужен какой-то индикатор на клиенте, чтобы использовать его. Как правило, это cookie-файл сервера, который очень тонкий и в основном представляет собой GUID для сеанса и ничего более. Но вы можете настроить сайты для передачи идентификатора сеанса в URI, поэтому он не обязательно должен быть cookie.

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

2 голосов
/ 12 июля 2011

Идентификатор сеанса по умолчанию сохраняется как cookie. Вы также можете настроить сеанс так, чтобы он передавал свой идентификатор в качестве параметра запроса («без cookie»).

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