Зачем нужны куки и сеансы
Из истории веб-разработки мы знаем, что между браузером и сервером используется протокол 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.
- Если домен нашего файла cookie в домене A установлен на f.com.cn, то и f.com.cn, и его поддомены могут получить этот файл cookie, то есть и домен A, и домен B могут получить этот файл cookie.
- Если и домен A, и домен B устанавливают домен файла cookie как f.com.cn, тогда будет покрытие
- Если домен A не имеет доменного метода, который явно устанавливает файл cookie,Тогда домен a.b.f.com.cn, разница в том, что в это время субдомен доменного имени А не сможет получить этот файл cookie
Подводя итог, мы знаем полезность домена, и умные друзья это обнаружили, единый вход реализован по этому принципу.
Хорошо, теперь, когда вы узнали о свойствах Set-Cookie, начните создавать файлы cookie.
Веб-сервер создает файл cookie, отправляя http-сообщение с именем Set-Cookie:
Set-Cookie: value[; expires=date][; domain=domain][; path=path][; secure]
Здесь мы думаем над вопросом, когда мы создаем несколько файлов cookie на сервере, эти файлы cookie попадают в один элемент заголовка или существуют как отдельные заголовки?
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 работать правильно.
- Передать SessionID через URL
- Передать SessionID через Cookie
- Передать SessionID через SSL
- Передать SessionID через скрытую форму
Первый случай:
Если браузер не поддерживает функцию cookie, он перезапишет SessionCookieName пользователя (по умолчанию JSESSIONID) в параметр URL запроса пользователя. Формат: /путь/Сервлет;имя=значение;имя2=значение2?Имя3=значение3
Третий случай:
SessionID устанавливается в соответствии со значением свойства javax.servlet.request.ssl_session.
Примечание. Если клиент поддерживает файлы cookie и перезаписывает URL-адрес, Tomcat по-прежнему будет анализировать идентификатор сеанса в файле cookie и перезаписывать идентификатор сеанса в URL-адресе.
Принцип работы
Давайте сначала посмотрим на диаграмму последовательности работы сеанса
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»