Суть единого входа и управления разрешениями: знакомство с сеансом и файлом cookie

задняя часть JavaScript браузер Tomcat

В этой статье начинается первая часть серии «Единый вход и управление полномочиями»: сущность единого входа и управления полномочиями. В этой части в основном представлены связанные концепции знаний, абстрактные процедуры обработки и общие структуры реализации. Благодаря введению в эту часть вы сможете получить общее представление о едином входе в систему и управлении полномочиями, а также получить общее представление о связанных с ними концепциях, процедурах обработки и общих реализациях.

В этой статье представлены сеанс и файлы cookie, которые являются основой реализации входа в систему, в основном со следующих аспектов:

  • Основные понятия сеанса и файлов cookie
  • жизненный цикл сеанса
  • Объем файлов cookie

Вопрос о междоменных файлах cookie будет рассмотрен отдельно в последующих статьях.

Базовые концепты

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

Как и наше удостоверение личности, номер удостоверения личности уникален для каждого человека.Он генерируется в соответствии с правилами провинции, города, даты рождения, пола и т. д. Когда мы обращаемся в государственные учреждения, нам необходимо иметь при себе удостоверение личности. , Они передают удостоверение личности.Проверить нашу личность.

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

servlet session

Пакет javax.servlet.http является основным API-интерфейсом сеанса, в основном, включая следующие интерфейсы:

  • HttpSession: определение фактического интерфейса сеанса;
  • Слушатель: когда в сеансе происходят некоторые действия, такие как создание, установка атрибутов, аннулирование и т. д., будут инициированы некоторые события и будет выполнена соответствующая обработка;
  • Событие: когда действие запускается, оно инкапсулируется как соответствующее событие;

Session相关接口

Интерфейсы, связанные с сеансом, обычно реализуются серверами приложений, такими как Tomcat, Resin и Jetty. Основные возможности сеанса:

  • Некоторые свойства можно установить и получить;
  • Каждому сеансу соответствует номер sessionId, который является единственным представлением сеанса;
  • Сессия имеет период ожидания, и пользователь не работает в течение длительного времени.Поддерживаемый таймер очистит сессию, чтобы обеспечить своевременное освобождение ресурсов;
  • Вы можете активно очистить сеанс, вызвав метод invalidate;

В tomcat реализация HttpSession — это StandardSession, а StandardSession будет реализовывать пользовательский интерфейс Session, который является оболочкой для HttpSession.

Tomcat Sesion接口

Кроме того, в tomcat будет реализовано управление сессиями и сохраняемость, а соответствующую сессию можно будет получить в любое время.Конкретная реализация в этой статье не анализируется.В Интернете есть много статей.

cookie

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

Сервер устанавливает файл cookie в заголовок ответа через HTTPResponse и отправляет его клиенту, а последующий клиент автоматически устанавливает информацию файла cookie в заголовок запроса. Ниже представлена ​​информация о файлах cookie после входа в Baidu:

百度cookie信息

У файла cookie также есть срок действия, который можно установить на сервере с помощью cookie.setMaxAge(expiry), expiry=-1: срок действия файла cookie истечет после закрытия браузера; срок действия>0: файл cookie будет сохранен на жестком диске. диск, пока он не будет установлен Когда время истечет, он будет автоматически удален браузером; expiry=0: удалить файл cookie, и файл cookie будет удален браузером.

Есть еще несколько особенностей:

  • setDomain: установите область действия cookie, которая будет подробно описана позже;
  • isHttpOnly: используется ли только протокол http. Его можно получить только через getCookies() в бэкенде, js не может его получить;
  • Размер каждого файла cookie: 4кб, если он превышает 4кб, браузер его не распознает;
  • Файлы cookie небезопасны и могут привести к утечке информации о пользователе, а браузер поддерживает отключение операций с файлами cookie;
  • Временная сессия: жизненный цикл по умолчанию, файл cookie уничтожается при закрытии браузера;
интерактивный процесс

交互过程图

  1. Используйте браузер для доступа к странице сервера;
  2. После того, как сервер получит первый запрос от клиента, он создаст сеанс и создаст уникальный идентификатор сеанса;
  3. При этом в ответном запросе устанавливается cookie, а имя атрибута — jessionid;
  4. После того, как клиент его получит, он сохранит jessionid, и при повторном запросе он будет установлен в заголовке, и сервер сможет получить его из заголовка запроса;
  5. Сервер проверяет, существует ли полученный идентификатор сеанса, и может проверить, является ли он тем же пользователем;

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

жизненный цикл сеанса

Сеанс хранится на стороне сервера. Сеанс создается при первом доступе пользователя. Сеанс будет создан при доступе к таким программам, как jsp и сервлет. Не будут создаваться только статические ресурсы, такие как html и изображения. Вы можно вызвать request.getSession(true), чтобы принудительно создать сеанс.

Сервер очистит из памяти сеанс, который не был активен в течение длительного времени.Время инвалидации сеанса по умолчанию в tomcat составляет 30 минут.Вы можете вызвать метод invalidate сеанса, чтобы принудительно очистить его.

Кроме того, мы можем самостоятельно реализовать управление жизненным циклом сеанса для удовлетворения конкретных потребностей бизнеса, таких как единый вход, распределенный сеанс и т. д., которые будут обсуждаться позже. Tomcat может предоставить соответствующие расширения, которые будут представлены в последующих статьи.

Объем файлов cookie

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

Например, существует доменное имя третьего уровня support.kefu.mi.com, где mi.com — доменное имя первого уровня, а kefu.mi.com — доменное имя второго уровня.

Установите файлы cookie для 3 типов доменных имен, соответственно установите разные домены и проверьте эффективность файлов cookie при посещении доменных имен на всех уровнях. Если для домена задано пустое значение, по умолчанию для домена используется текущее доменное имя.

Установить файлы cookie под доменным именем первого уровня mi.com
параметр домена Уровень доступа доступ вторичный Доступ к уровню 3
нулевой
mi.com
kefu.mi.com × × ×
mcc.kefu.mi.com × × ×

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

Установите файлы cookie под доменным именем второго уровня kefu.mi.com.
параметр домена Уровень доступа доступ вторичный Доступ к уровню 3
нулевой ×
mi.com
kefu.mi.com ×
mcc.kefu.mi.com × × ×

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

Установите файлы cookie под доменным именем третьего уровня mcc.kefu.mi.com.
параметр домена Уровень доступа доступ вторичный Доступ к уровню 3
нулевой × ×
mi.com
kefu.mi.com ×
mcc.kefu.mi.com × ×

Можно сделать вывод, что параметр domain может задавать имя родительского домена и самого себя, но не может задавать имена других доменов, в том числе поддоменов, иначе куки работать не будут.

Индекс серии:

  1. Общие сведения о сеансах и файлах cookie
  2. HTTP-перенаправление
  3. Введение в единый вход
  4. проблемы с безопасностью файлов cookie
  5. Введение в управление правами

情情说