Углубленный анализ сессий и файлов cookie

задняя часть сервер контейнер браузер

Зачем нужны куки и сеансы

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

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

Cookie

Сначала давайте разберемся с куки

что

Файл cookie — это небольшой фрагмент текста, который браузер сохраняет на компьютере пользователя. С точки зрения непрофессионала, когда пользователь обращается к серверу через http, сервер возвращает некоторые пары «ключ-значение» браузеру клиента и передает эти данные. С некоторыми ограничениями, когда пользователь обращается к серверу в следующий раз, когда условия выполняются, данные будут возвращены на сервер полностью через заголовок запроса, и сервер будет судить о разных пользователях на основе этой информации.

Другими словами, файл cookie — это часть информации, которую сервер передает клиенту и сохраняет ее на клиенте. Размер и количество этого файла cookie ограничены! !

Создание файлов cookie

В настоящее время существует две версии файлов cookie, соответствующих двум заголовкам ответов set: «Set-Cookie» и «Set-Cookie2». Set-Cookie2 не поддерживается в сервлетах, поэтому давайте взглянем на атрибуты Set-Cookie:

объект недвижимости Знакомство с объектами недвижимости
NAME=VALUE Пара "ключ-значение", вы можете установить сохраненный ключ/значение, где ИМЯ не может совпадать с именами других элементов свойства.
Expires Время истечения срока действия, по истечении которого cookie истекает
Domain Создать доменное имя файла cookie
Path Файл cookie создается по текущему пути
Secure Настройки шифрования, после установки куки будут возвращаться только при установлении SSH-подключения.

Теперь давайте сначала разберемся с этими элементами свойств, остальные очень понятны, давайте посмотрим, для чего используется Домен:

Теперь предположим, что здесь есть два домена:

Домен А:a.b.f.com.cn
Домен Б:c.d.f.com.cn

Очевидно, что и домен A, и домен B являются поддоменами домена f.com.cn.

Подводя итог, мы знаем полезность домена, и умные друзья это обнаружили, единый вход реализован по этому принципу.

Хорошо, теперь, когда вы узнали о свойствах Set-Cookie, начните создавать файлы cookie.

Веб-сервер создает файл cookie, отправляя http-сообщение с именем Set-Cookie:

Set-Cookie: value[; expires=date][; domain=domain][; path=path][; secure]

Здесь мы думаем над вопросом, когда мы создаем несколько файлов cookie на сервере, эти файлы cookie попадают в один элемент заголовка или существуют как отдельные заголовки?


image

int size = headers.size();
for(int i = 0;i < size;i++){
    outputBuffer.sendHeader(headers.getName(i),headers.getValue(i));
}
Мы видим, что при построении потока байтов возврата HTTP все элементы в заголовке записываются последовательно без каких-либо изменений. Таким образом, можно представить, что когда браузер получает данные, возвращаемые http, он анализирует каждый элемент заголовка отдельно.

++ Далее сохраняем на клиенте, как его сохранить? Здесь мы должны узнать больше о файлах cookie. ++

Классификация файлов cookie

Файлы cookie уровня сеанса:

Так называемый файл cookie уровня сеанса означает, что срок действия файла cookie истекает после закрытия браузера.

Файлы cookie постоянного уровня:

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

Хорошо, теперь файл cookie хранится на стороне клиента. Когда мы запрашиваем URL-адрес, браузер помещает квалифицированный файл cookie в заголовок запроса и передает его на сервер в соответствии с путем URL.

Session

Вам не просто это увидеть, 😀, но нам все же стоит задуматься, куки ограничены по размеру и количеству, и все больше и больше куки представляют собой увеличение объема передачи клиента и сервера. не передавать все значения файлов cookie, а передавать только уникальный идентификатор и использовать этот идентификатор для непосредственного поиска информации о пользователе на сервере? Ответ - да, это наша сессия.

Понять сеанс:

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

Сессии и файлы cookie

На самом деле есть четыре способа заставить Session работать правильно.

  1. Передать SessionID через URL
  2. Передать SessionID через Cookie
  3. Передать SessionID через SSL
  4. Передать SessionID через скрытую форму
Первый случай:

Если браузер не поддерживает функцию cookie, он перезапишет SessionCookieName пользователя (по умолчанию JSESSIONID) в параметр URL запроса пользователя. Формат: /путь/Сервлет;имя=значение;имя2=значение2?Имя3=значение3

Третий случай:

SessionID устанавливается в соответствии со значением свойства javax.servlet.request.ssl_session.

Примечание. Если клиент поддерживает файлы cookie и перезаписывает URL-адрес, Tomcat по-прежнему будет анализировать идентификатор сеанса в файле cookie и перезаписывать идентификатор сеанса в URL-адресе.

Принцип работы

Давайте сначала посмотрим на диаграмму последовательности работы сеанса

image

1. Создайте сеанс

Когда клиент обращается к серверу, сервер создает сеанс для клиента с помощью метода request.getSession().Если текущий идентификатор сеанса не имеет соответствующего объекта HttpSession, он создаст новый и добавит его в org.apache. .catalina.Manager Сохраняется контейнер сеанса, в котором сохраняется состояние. Конечно, этот SessionID уникален.

Во-вторых, сохранение сеанса

Как видно из рисунка, объект сеанса был сохранен в классе Manager.

Давайте посмотрим, как StandardManager управляет жизненным циклом всех объектов StandardSession.

Когда контейнер сервлетов закрывается:

StandardManager сохранит неистекший объект StandardSession (команды остановки и запуска в контейнере сервлета должны быть вызваны и не могут быть уничтожены напрямую)

Когда контейнер сервлета перезапускается:

Инициализация StandardManager перечитает этот файл и проанализирует все объекты сеанса.

3. Уничтожение сессии

Здесь есть недоразумение, которое является и моим предыдущим недоразумением, то есть я понимаю жизненный цикл сессии как сессию, которая создается при открытии браузера, и уничтожается при закрытии браузера.Это понимание неверно! !

Период объявления сеанса от создания до истечения времени ожидания

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

Проверить аннулирование сеанса

Проверка того, является ли каждый сеанс недействительным, выполняется в фоновом потоке Tomcat (в методе backgroundProcess()); в дополнение к фоновому процессу, проверяющему, является ли сеанс недействительным, вызов request.getSession() также проверяет, истек ли срок действия сеанса. , Конечно, вызов этого метода воссоздает новый сеанс, если он истечет.

сделать резюме

сходства и различия

Сходства (где они связаны)

  • И Session, и Cookie существуют, чтобы протокол http сохранял состояние.
  • Сеанс работает через файлы cookie, а идентификатор сеанса, передаваемый файлом cookie, позволяет сеансу узнать, кто является клиентом.

разница

Сессия сохраняет информацию на сервере, Cookie сохраняет информацию на клиенте

процесс работы

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




Ссылка: серия alibaba «Углубленный анализ Java Web»