Файлы cookie и сеансы
HTTP-протокол — это无状态协议
, то есть каждый раз, когда сервер получает запрос от клиента, это совершенно новый запрос, и сервер не знает историческую запись запроса клиента; основная цель сеанса и файла cookie — компенсировать отсутствие состояния Природа HTTP.
Что такое сессия
Клиент запрашивает сервер, и сервер открывает блок для этого запроса内存空间
, этот объект является объектом сеанса, структура храненияConcurrentHashMap
. Сеанс компенсирует природу HTTP без сохранения состояния, и сервер может использовать сеанс для хранения некоторых записей операций клиента во время того же сеанса.
Сессия, как определить, одна ли это сессия
Когда сервер получает запрос в первый раз, он открывает пространство сеанса (создает объект сеанса), генерирует идентификатор сеанса и отправляет запрос клиенту для его установки через **Set-Cookie: JSESSIONID=XXXXXXX* * команда в заголовке ответа Cookie response После того, как клиент получит ответ, на локальном клиенте будет установлена информация о cookie **JSESSIONID=XXXXXXX **, а время истечения срока действия cookie — это конец сеанса браузера;
Затем каждый раз, когда клиент отправляет запрос на тот же веб-сайт, заголовок запроса будет содержать информацию о файлах cookie (включая sessionId), а затем сервер считывает информацию о файлах cookie в заголовке запроса и получает значение с именем JSESSIONID и получает на этот раз SessionId запроса.
Недостатки сеанса
Сессионный механизм имеет недостаток, например, сервер А хранит сессию, то есть после балансировки нагрузки, если трафик А резко возрастает в течение определенного периода времени, он будет переадресован на Б для доступа, но сервер Б этого не делает. не хранить сеанс A, что приведет к сбою сеанса.
Что такое файлы cookie
Файлы cookie в протоколе HTTP включаютWeb Cookie
и浏览器 Cookie
, представляющий собой небольшой фрагмент данных, который сервер отправляет веб-браузеру. Файл cookie, отправленный сервером в браузер, сохраненный браузером и отправленный на сервер со следующим запросом. Обычно он используется, чтобы определить, исходят ли два запроса от одного и того же браузера, например, если пользователь остается в системе.
Механизм HTTP Cookie является дополнением и улучшением протокола HTTP без сохранения состояния.
Файлы cookie в основном используются для следующих трех целей.
会话管理
Логин, корзина, счет в игре или что-то еще, что сервер должен помнить.
个性化
Пользовательские настройки, темы и другие настройки
追踪
Записывайте и анализируйте поведение пользователей
Раньше файлы cookie использовались для общего хранения данных на стороне клиента. Хотя это законно, поскольку это единственный способ хранения данных на стороне клиента, сегодня рекомендуются современные API-интерфейсы хранилища. Файлы cookie отправляются с каждым запросом, поэтому они могут снизить производительность (особенно при мобильных подключениях для передачи данных).
Создать файлы cookie
При получении HTTP-запроса от клиента сервер может отправить ответSet-Cookie
заголовки, файлы cookie обычно сохраняются браузером, а затем файлы cookie отправляются на сервер вместе с заголовками HTTP.
Set-Cookie и заголовок Cookie
Set-Cookie
Заголовок ответа HTTP отправляет файл cookie с сервера пользовательскому агенту. Ниже приведен пример отправки файла cookie
Этот заголовок говорит клиенту сохранить файл cookie
Теперь при каждом новом запросе к серверу браузер будет отправлять все ранее сохраненные файлы cookie обратно на сервер, используя заголовок Cookie.
Существует два типа файлов cookie: файлы cookie сеанса и постоянные файлы cookie. Если файл cookie не содержит даты истечения срока действия, он считается файлом cookie сеанса. Сеансовые файлы cookie хранятся в памяти, никогда не записываются на диск и после этого безвозвратно теряются при закрытии браузера. Если файл cookie содержит有效期
, рассматривайте его как постоянный файл cookie. В дату, указанную сроком действия, файл cookie будет удален с диска.
ДругойCookie的 Secure 和 HttpOnly 标记
, следующее представит
Сеансовые файлы cookie
В приведенном выше примере создается файл cookie сеанса. В файле cookie сеанса есть функция, согласно которой файл cookie будет удален при закрытии клиента, поскольку он не указываетExpires
илиMax-Age
инструкция.
Однако веб-браузеры могут использовать восстановление сеанса, в результате чего большинство файлов cookie сеанса остаются постоянными, как если бы браузер никогда не закрывался.
Постоянные файлы cookie
Срок действия постоянных файлов cookie не истекает при закрытии клиента, а вместо этого特定日期(Expires)
или特定时间长度(Max-Age)
Истекший. Например
Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT;
Флаги Secure и HttpOnly для файлов cookie
Защищенные файлы cookie необходимо отправлять на сервер в зашифрованном виде по протоколу HTTPS. Даже если это безопасно, конфиденциальная информация не должна храниться в файлах cookie, поскольку они по своей сути небезопасны, и этот флаг не обеспечивает реальной защиты.
Роль HttpOnly
-
Отсутствие атрибута HttpOnly в сеансовом файле cookie приведет к тому, что злоумышленник получит информацию о пользовательском файле cookie через программу (JS-скрипт, апплет и т. д.), что приведет к утечке информации о пользовательском файле cookie и повысит угрозу перекрестной атаки злоумышленника. -атака с использованием скриптов сайта.
-
HttpOnly – это расширение файла cookie, созданное корпорацией Майкрософт. Это значение указывает, может ли клиентский сценарий получить доступ к файлу cookie.
-
Если для атрибута HttpOnly в файле cookie не задано значение true, файл cookie может быть украден. Украденные файлы cookie могут содержать конфиденциальную информацию, которая идентифицирует пользователя сайта, например идентификаторы сеансов ASP.NET или билеты проверки подлинности с помощью форм, и злоумышленники могут воспроизвести украденные файлы cookie, чтобы выдать себя за пользователя или получить конфиденциальную информацию, выполнить межсайтовые сценарии. атаки и многое другое.
Объем файлов cookie
Domain
иPath
Идентификатор определяет область действия файла cookie: то есть, на какие URL-адреса должен быть отправлен файл cookie.
Domain
Определяет, какие хосты могут принимать файлы cookie. Если не указано, по умолчанию используется текущий хост (Не содержит поддоменов). если указаноDomain
, он обычно включает поддомены.
Например, если вы установитеDomain=mozilla.org
, файл cookie также включен в поддомен (например,developer.mozilla.org
).
Например, установитеPath=/docs
, все следующие адреса будут совпадать:
/docs
/docs/Web/
/docs/Web/HTTP
Сравнение веб-токена JSON и файлов cookie сеанса
JSON Web Token ,简称 JWT
, это иSession
Оба могут обеспечить аутентификацию пользователя для веб-сайта, но это не одно и то же.
Ниже представлено исследование различий между JWT и Session.
Сходства между JWT и сеансовыми файлами cookie
Прежде чем обсуждать JWT и сеансовые файлы cookie, необходимо понять их сходство.
Их можно использовать как для аутентификации пользователей, так и для аутентификации пользователей при переходе на разные страницы и после перехода на веб-сайт или в приложение.
Без обоих вам может потребоваться входить в систему при каждом переключении страниц. Потому что HTTP — это протокол без сохранения состояния. Это также означает, что когда вы посещаете веб-страницу, а затем щелкаете другую страницу того же сайта, сервер内存中
Помните, что вы не будете работать раньше.
Поэтому, если вы войдете в систему и посетите другую страницу, к которой у вас есть доступ, вы снова войдете в систему, поскольку HTTP не записывает, что вы только что вошли в систему.
JWT и сеансовые файлы cookie — это механизмы, используемые для переключения между разными страницами и сохранения информации для входа пользователя..
Тем не менее, обе технологии используются для сохранения вашего статуса входа в систему и позволяют вам просматривать любой защищенный паролем веб-сайт. Эта проблема решается путем аутентификации пользовательских данных каждый раз, когда делается новый запрос.
Так что же общего между JWT и сеансовыми файлами cookie? То есть они могут поддерживать механизм для записи и проверки вашего статуса входа между различными запросами.
Что такое сеансовые файлы cookie
Сеансовые файлы cookie, также известные как会话 Cookies
, в сеансовых файлах cookie статус входа пользователя сохраняется в服务器
из内存
середина. Когда пользователь входит в систему, сеанс безопасно создается сервером.
В каждом запросе сервер будет считывать SessionId из файла cookie сеанса. Если данные на сервере совпадают с прочитанным SessionId, сервер отправит ответ браузеру, чтобы позволить пользователю войти в систему.
Что такое веб-токены Json
Аббревиатура Web Token Json - JWT, обычно можно назватьJson 令牌
. этоRFC 7519
определено в安全的
информация какJson 对象
Форма передачи. Информация, хранящаяся в JWT,数字签名
, поэтому ему можно доверять и понимать. JWT могут быть подписаны с использованием алгоритма HMAC или открытых/закрытых ключей RSA/ECDSA.
Использование JWT в основном используется для следующих двух пунктов
-
认证(Authorization)
: Это наиболее распространенный тип случая JWT, когда пользователь входит в систему, за каждым запросом будет включаться JWT, что позволяет пользователям получить доступ к разрешенной маршрутизации, сервисам и ресурсам с помощью токена.单点登录
Это функция, которую мы широко использовали JWT сегодня, потому что она маленькая. -
信息交换(Information Exchange)
: JWT — это способ безопасной передачи информации. Аутентифицируйте JWT, подписав его открытым/закрытым ключом. Кроме того, поскольку подпись используетhead
иpayload
Вычислительный, поэтому вы также можете убедиться, что содержимое не было подделано.
Формат JWT
Ниже мы рассмотрим, каковы состав и формат JWT?
JWT в основном состоит из трех частей, каждая из которых.
разделена, каждая часть
Header
Payload
Signature
Таким образом, очень простая композиция JWT будет выглядеть так:
Затем мы обсуждаем разные части отдельно.
Header
Заголовок — это заголовок JWT, который обычно состоит из двух частей:令牌的类型(即 JWT)
и используется签名算法
, например HMAC SHA256 или RSA.
Например
{
"alg": "HS256",
"typ": "JWT"
}
После указания типа и алгоритма подписи блок JsonBase64Url
Кодирование формирует первую часть JWT.
Payload
Вторая часть токенаPayload
, полезная нагрузка содержит объявление. Утверждения — это утверждения о сущностях (обычно о пользователях) и других данных. Декларации бывают трех видов:Зарегистрированный, публичный и частныйутверждение.
-
registered 声明
: Содержит набор рекомендуемых предопределенных объявлений, в основном включая
ISS | подписывающий |
---|---|
iss (issuer) | подписывающий |
exp (expiration time) | Дата истечения срока годности |
sub (subject) | тема |
aud (audience) | Аудитория |
nbf (Not Before) | эффективное время |
iat (Issued At) | Время выпуска |
jti (JWT ID) | Нумерация |
-
public 声明
: публичное заявление, вы можете добавить любую информацию, как правило, добавить информацию, связанную с пользователем, или другую необходимую информацию для нужд бизнеса, но не рекомендуется добавлять конфиденциальную информацию, потому что эта часть может быть расшифрована на стороне клиента. -
private 声明
: пользовательские претензии, предназначенные для обмена информацией между сторонами, которые соглашаются их использовать, ни зарегистрированная претензия, ни публичная претензия.
Например
{
"sub": "1234567890",
"name": "John Doe",
"admin": true
}
Тогда блок полезной нагрузки Json будетBase64Url
Кодирование формирует вторую часть JWT.
signature
Третья часть JWT — это визовая информация, состоящая из трех частей.
- заголовок (после base64)
- полезная нагрузка (после base64)
- secret
Например, нам нужен алгоритм HMAC SHA256 для подписи.
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret)
Подпись, используемая для аутентификации подлинности сообщения не изменилось в этом процессе и подписать токен, используя закрытый ключ, он может проверить истинную идентичность отправителя JWT
собранный вместе
Теперь мы соединим указанные выше три части строки Base64-URL, разделенные точками, которые можно легко передать в средах HTML и HTTP.
Ниже приведен полный пример JWT, который кодирует заголовок и полезную нагрузку, а затем подписывает их подписью.
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ
Если вы хотите протестировать и написать его самостоятельно, вы можете посетить официальный сайт JWT.Audition.IO/#debugger-i…
Разница между JWT и сеансовыми файлами cookie
Как JWT, так и сеансовые файлы cookie обеспечивают безопасную аутентификацию пользователя, но они различаются в следующих моментах.
криптографическая подпись
JWT имеют криптографические подписи, а сеансовые файлы cookie — нет.
JSON не имеет состояния
JWT это无状态
Поскольку оператор хранится в客户端
, а не в памяти сервера.
Аутентификацию можно пройти на本地
вместо того, где запрос должен пройти через базу данных сервера или что-то подобное. Это означает, что пользователи могут быть аутентифицированы несколько раз без необходимости взаимодействия с сайтом или базой данных приложения и без использования большого количества ресурсов в процессе.
Масштабируемость
Сеансовые файлы cookie хранятся в памяти сервера, а это означает, что если веб-сайт или приложение большое, оно будет потреблять много ресурсов. Поскольку JWT не имеют состояния, во многих случаях они могут экономить ресурсы сервера. Таким образом, JWT обладает большей силой, чем сеансовые файлы cookie.可扩展性
.
JWT поддерживает междоменную аутентификацию
Сеансовые файлы cookie могут использоваться только в单个节点的域
или его子域
эффективен в. Если они попытаются получить доступ через третий узел, они будут забанены. Это проблема, если вы хотите безопасное соединение между вашим сайтом и другими сайтами.
Использование JWT может решить эту проблему, используя JWT может пройти多个节点
Выполните аутентификацию пользователя, о чем мы часто говорим跨域认证
.
Выбор JWT и сеансовых файлов cookie
Мы обсудили различия между JWT и файлами cookie выше, я полагаю, что у вас также будет более глубокое понимание выбора, вообще говоря.
Сеанс cookie обычно достаточно для малых и средних участков, которые нужно только входить в систему пользователя и получить доступ к некоторой информации, хранящейся в базе данных сайта.
Если у вас есть сайт на уровне предприятий, приложение или в непосредственной близости от сайта, и необходимость справиться с большим количеством запросов, особенно много третьих лиц или третьих сторон (включая API в разных областях), JWT явно более подходит.
постскриптум
Я задал этот вопрос во время интервью два дня назад, поэтому я написал статью, чтобы обобщить его, и задал вопрос интервью:Отключить куки, как использовать сеанс? Baidu в Интернете и обнаружил, что это вопрос для собеседования по PHP...
Но я все же решил понять, как использовать Session после отключения куки.
- Если файлы cookie отключены, сервер по-прежнему будет отправлять идентификатор сеанса в браузер в виде файла cookie, но браузер больше не будет сохранять этот файл cookie (т.е. идентификатор сеанса).
- Если вы хотите продолжить использовать сеанс, вам нужно использовать
URL 重写
способ достижения, вы можете обратиться кwoo woo woo.cn blog on.com/Re N миллиард-фанат/Боюсь…
Связанные ссылки:
woo woo woo.cn blog on.com/Re N миллиард-фанат/Боюсь…
блог woo woo woo.cn на.com/-rocks/afraid/61…
Woohoo.все о cookies.org/manage-cook…
у-у-у. Краткое описание.com/afraid/4 ах 124 ах 10 раундов…