понимание сеанса

задняя часть сервер браузер Google

понимание сеанса

还是那句。 . . .新手上路。 .大神欢迎指点

1. Концепция сеанса

Собственно, что такое сессия? Что такое файлы cookie? Это старомодные вопросы. . И люди, которые занимались смежными разработками, в основном это знают. . Но не очень понятно.Под гуглом не сложно разобраться в этих двух вещах. . Тогда я не буду обсуждать этот вопрос здесь. .

2. Связь между файлами cookie и сессиями

Позвольте мне объяснить мое понимание:

Хотя схемы cookie и сеанса принадлежат клиенту и серверу соответственно, реализация сеанса на сервере зависит от файла cookie на клиенте; шаги примерно следующие:

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

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

проблема:

  1. Можно ли по-прежнему использовать сеанс после отключения файлов cookie?
  2. Может ли приложение действительно не использовать сеанс?

для обсуждения вышеуказанных вопросов. . Давайте сначала посмотрим на время создания и уничтожения сеанса. .

3. Когда создавать сеанс и уничтожать сеанс

  1. При создании сеанса будет создан файл cookie с MaxAge равным -1, что означает, что он может существовать только в памяти. Когда файлы cookie отключены на стороне браузера, файл cookie все равно будет создан.
  2. Когда запрос, отправленный браузером, содержит параметр jsessionid или заголовок cookie, контейнер больше не создает новую сессию, а только находит предыдущую сессию для ассоциации. Здесь есть два случая:

    1) Используйте jsessionid. Если это значение может соответствовать существующему сеансу, новый сеанс не будет создан, в противном случае новый сеанс все равно будет создан.

    2) Использовать куки. Если значение соответствует существующей сессии, или создайте новую сессию, но если соответствующей сессии нет (как указано выше после перезапуска сервера), будет восстановлен контейнер с соответствующей сессией на основе информации cookie, как если бы ранее это было такой же.

  3. Когда сессия уничтожается?
    Когда мы закроем браузер, снова откроем его и подключимся к серверу, сервер выделит новую сессию, а это означает, что будет запущена новая сессия. Итак, исходная сессия уничтожена? Я провел небольшой эксперимент:

Создайте сеанс:

//启动session的初始化
session_start();
//注册session变量,并且赋值
$_SESSION["username"] = "hello"
//输出生成的session_id
echo session_id();

Посетите страницу, чтобы создать сеанс, получить session_id и закрыть браузер;

Создайте объект сеанса на основе session_id

//上面输出的session_id
$session_id = "qpk6onnn3husvotnke030ftcm4";
session_id($session_id);
session_start();
echo $_SESSION["username"];

Результат можно вывести "привет"

Это можно увидеть:

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

4. Проблема регрессии. .

На самом деле мое понимание очень простое (пожалуйста, укажите не то место). .

Пока есть session_id, сессию можно найти. . .

Файл cookie — это средство сохранения уникальной идентификации (session_id);

Отключив файлы cookie или изначально не поддерживая файлы cookie, но с помощью других средств, также можно реализовать функции, реализуемые файлами cookie. Пока у сервера есть session_id, он все еще может найти соответствующий сеанс, это всего лишь механизм сеанса, который автоматически реализуется внутри через файлы cookie. . . Если вы не используете файлы cookie, вам придется реализовать логику самостоятельно. . . Он кажется немного несвежим, но свинина испортилась, и это все еще свинина. . . Зависит от того, как вы это видите. . .