Подтвердить что ты не робот

Сессия хранится на стороне клиента или на стороне сервера

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

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

4b9b3361

Ответ 1

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

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

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

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

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

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

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

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

Вы можете узнать больше о состоянии сеанса ASP.NET здесь

Ответ 2

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

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

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

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

Ответ 3

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

Сегмент сервера

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

Клиентский сеанс

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

Ответ 4

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

Ответ 5

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

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

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