Отслеживание HTTP-сессии - PullRequest
       45

Отслеживание HTTP-сессии

27 голосов
/ 16 ноября 2009

Поскольку HTTP является протоколом без сохранения состояния, когда клиент делает несколько запросов к серверу, как сервер однозначно идентифицирует запросы конкретного клиента в течение определенного периода времени, скажем, t1, t2, t3 ..

Я просматривал Интернет и наткнулся на такие термины, как идентификатор сеанса, перезапись URL-адреса и файлы cookie. Но было бы здорово, если бы кто-то объяснил это лучше. В частности, какая часть HTTP-запроса и ответа будет использоваться для отслеживания сеанса?

Ответы [ 5 ]

42 голосов
/ 16 ноября 2009

Как вы упомянули, общие способы реализации отслеживания сеанса HTTP включают перезапись URL-адресов и файлы cookie. Отслеживание сеанса в основном требует, чтобы идентификатор сеанса поддерживался в нескольких запросах к серверу. Это означает, что каждый раз, когда данный клиент делает запрос к серверу, он передает один и тот же идентификатор сеанса. Сервер может использовать этот идентификатор для поиска информации о сеансе, которую он поддерживает.

При использовании файлов cookie сервер просит клиента сохранить файл cookie, установив заголовок ответа Set-Cookie HTTP. Этот файл cookie содержит уникальный идентификатор сеанса, назначенный этому клиенту - в этом примере строка «ABAD1D»:

    Set-Cookie: JSESSIONID=ABAD1D;path=/

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

    Cookie: JSESSIONID=ABAD1D

При использовании перезаписи URL этот же идентификатор сеанса вместо этого отправляется куда-то в URL. Опять же, сервер извлекает идентификатор сеанса из URL, чтобы он мог найти сеанс для конкретного клиента:

    http://my.app.com/index.jsp;JSESSIONID=ABAD1D

Однако сервер также должен убедиться, что любые URL-адреса на веб-страницах, отправленных обратно клиенту, также перезаписаны, чтобы содержать этот идентификатор сеанса конкретного клиента. Поскольку идентификатор сеанса закодирован в URL-адресах, этот метод отслеживания сеанса прозрачен для браузера. Часто сервер прибегает к перезаписи URL, если обнаружит, что не может установить cookie-файл сеанса на клиенте, что означает, что клиент не поддерживает / не разрешает использование cookie-файлов.

Обратите внимание, что сессии могут истечь. Это означает, что если сервер не «видит» данный идентификатор сеанса в течение определенного периода времени, он может удалить данные сеанса, чтобы сохранить ресурсы.

10 голосов
/ 16 ноября 2009

В частности, какая часть HTTP запрос и ответ будет использоваться для отслеживание сеанса?

В ответе HTTP сервер может установить cookie. Это делается с помощью заголовка Set-Cookie. Например:

Set-Cookie: session=12345; path=/

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

Файл cookie отправляется обратно на сервер как часть заголовков HTTP. Например:

Cookie: session=12345

Никакая исходная информация о свойствах не возвращается вместе с cookie.

Уникальный файл cookie позволяет серверу связать уникальный ключ с конкретным экземпляром браузера. Затем сервер может использовать этот ключ в качестве индекса для хеш-таблицы или таблицы базы данных, которая содержит уникальную информацию о состоянии пользователя.

1 голос
/ 16 декабря 2015

Найти достаточно деталей здесь

HTTP-сессии - рекомендуемый подход. Сеанс идентифицирует запросы, которые исходят из одного и того же браузера в течение периода разговора. Все сервлеты могут использовать один и тот же сеанс. JSESSIONID генерируется сервером и может быть передан клиенту с помощью куки, перезаписи URL (если куки отключены) или встроенным механизмом SSL. Необходимо соблюдать осторожность, чтобы минимизировать размер объектов, хранящихся в сеансе, и объекты, хранящиеся в сеансе, должны быть сериализуемыми. В сервлете Java сеанс может быть получен следующим образом:

HttpSession session = request.getSession (); // возвращает текущий сеанс или новый сеанс

Время сеансов может быть превышено (настроено в web.xml) или аннулировано вручную.

1 голос
/ 16 ноября 2009

обработка сеанса в большинстве случаев обрабатывается путем отправки клиенту cookie . этот cookie будет отправляться обратно на сервер при каждом запросе от этого конкретного клиента.

session id будет связан с некоторыми ресурсами на стороне сервера (файл, оперативная память), поэтому сервер, прочитав session id в файле cookie, сможет найти этот ресурс и затем узнать, каким клиентом он был.

1 голос
/ 16 ноября 2009

Отслеживание сеанса - это вещь на стороне сервера.

Веб-сервер выдает некоторый идентификатор сеанса, который возвращается в браузер. Браузер отправляет этот идентификатор сеанса вместе с каждым запросом.

Вероятно, это делается с помощью файлов cookie для пользователя.

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