2015-11-20 2 views
2

Когда пользователь впервые обращается к веб-сайту, ответ сервера initial может содержать заголовок SET-Cookie для установки идентификатора сеанса. Такие, как:Как обрабатывается сеанс?

Set-Cookie: JSESSIONID=04427E42C4AE7A5DD1CCE86B8B5F7110; Path=/TestSite/; HttpOnly 

Тогда клиент будет носить его в cookie header для последующих запросов HTTP: Такие, как:

Cookie: JSESSIONID=04427E42C4AE7A5DD1CCE86B8B5F7110 

Мой вопрос:

  1. Так объект реального сеанса некоторые структура данных, созданная и поддерживаемая на сервере. Сервер просто отправляет клиенту index key. Когда появятся последующие запросы, сервер будет использовать этот ключ для поиска хранилища данных сеанса на сервере. При необходимости сервер может использовать базу данных для хранения данных сеанса. Правильно ли это изображение?

  2. Следующий код Java фактически обрабатывает данные сеанса, которые хранятся on server. Though похоже, что он манипулирует объектом запроса. Правильно?

    request.getSession().setAttribute("accountId", user.getId());

  3. Следующий код является по существу ключ (SessionID) смотрит вверх процесс. Он ищет объект сеанса on server, глядя на session id cookie sent from client. Правильно?

    Session s = (String) request.getSession();

  4. Есть ли шанс сервер не посылает заголовок Set-Cookie? Или это обязательно?

  5. Кажется, что магазин с ключевыми значениями, например Redis, очень подходит для магазина сеансов. Кто-нибудь пробовал это?

ответ

3

Таким образом, реальный объект сеанса некоторые структуры данных создается и поддерживается на сервере.

С сеансом сервлетов, да. Но в целом вы также можете хранить «реальные данные» в самом cookie сеанса. Имеет недостаток в том, что пользователь может видеть это и возиться с ним, и что он может быть довольно небольшим, но имеет то преимущество, что серверу не нужно сохранять состояние (и делиться им с другими в кластере).

Следующий код Java фактически манипулирует данными сеанса, который хранится на сервере

Это верно. API-интерфейс Servlet предоставляет этот интерфейс через request, так как он связан с ключом сеанса (и отдельным пользователем).

Есть ли вероятность, что сервер не отправит заголовок Set-Cookie? Или это обязательно?

Вы можете отключить это. Если вам нужны сеансы, но не нужны файлы cookie, это становится немного сложнее.Вы можете прикрепить параметр запроса к каждому URL-адресу.

Кажется, что такой магазин с ключевыми значениями, как Redis, очень подходит для магазина сеансов. Кто-нибудь пробовал это?

Да, это обычная установка.

Установка по умолчанию для контейнеров сервлетов - это сохранение сеанса в памяти. Это не требует какой-либо конфигурации или подготовки, но хорошо работает только для односерверных развертываний. Если у вас более одного сервера, вам необходимо либо поделиться информацией о сеансе (используя что-то вроде Redis), либо иметь «липкий сеанс» (настроить сеть, чтобы всегда отправлять одного и того же пользователя на тот же сервер).

Смежные вопросы