Что такое файлы cookie и сеансы и как они соотносятся друг с другом?

86

Я пытаюсь профессионально разбираться в файлах cookie и сеансах. Я знаю, что когда браузер подключается к серверу, сервер «просит» браузер «вставить» cookie с phpsessid в папку cookie браузера клиента.

Теперь, когда у нас есть «phpsessid», если клиент входит на сервер, браузер отправляет на сервер «phpsessid», а сервер просматривает папку tmp, и если у нас есть совпадение, он загружает обратно все данные, которые у пользователя есть для этого клиента, но я немного запутался в процессе.

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

Пустой текст
источник
Кажется, вы уже знаете, что происходит. В какой именно части вы хотели бы узнать? Часть HTTP / cookie или как PHP загружает хранилище сеансов?
Марио
Файл cookie, который браузер сохраняет с помощью phpsessid, является ли это phpsessid для идентификации клиента для создания сеансов и файлов cookie?
Blanktext
Файл cookie, который есть в браузере, содержит идентификатор сеанса php, который сообщает серверу: «Привет, я знаю этого парня», затем сервер берет данные сеанса (например, из / tmp /) и восстанавливает пользователя $ _SESSION
somedev
Да, я знаю это, но я спрашиваю, используется ли этот "phpsessid" для идентификации клиента перед созданием сеансов и файлов cookie, включается ли этот phpsessid в данные cookie и на клиентский компьютер, а также в файл сеанса в папке tmp сервера ?
Blanktext

Ответы:

171

Давайте пройдемся через это:

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

Печенье

Файлы cookie - это небольшие фрагменты данных (длиной не более 4 КБ), которые хранят данные в парах ключ = значение:

name=value; name2=value2

Они устанавливаются либо с помощью JavaScript , либо через сервер с использованием заголовка HTTP .

Файлы cookie имеют установленную дату и время истечения срока действия, например, с использованием заголовков HTTP:

Set-Cookie: name2=value2; Expires=Wed, 19 Jun 2021 10:18:14 GMT

В результате браузер установит файл cookie name2со значением value2, срок действия которого истечет примерно через 9 лет.

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

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

Файлы cookie также часто используются при создании сеансов .

Сессии

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

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

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

  1. Сервер открывает сеанс (устанавливает cookie через HTTP-заголовок)
  2. Сервер устанавливает переменную сеанса.
  3. Страница изменений клиента
  4. Клиент отправляет все файлы cookie вместе с идентификатором сеанса из шага 1.
  5. Сервер считывает идентификатор сеанса из cookie.
  6. Сервер соответствует идентификатору сеанса из списка в базе данных (или памяти и т. Д.).
  7. Сервер находит совпадение, читает переменные, которые теперь доступны на $_SESSIONсуперглобале.

Если PHP не найдет совпадения, он начнет новый сеанс и повторит шаги с 1 по 7.

Вы можете хранить конфиденциальную информацию в сеансе, потому что она хранится на сервере, но имейте в виду, что идентификатор сеанса все равно может быть украден, если пользователь, скажем, вошел в систему через небезопасный Wi-Fi. (Злоумышленник может прослушать файлы cookie и установить их как свои собственные, он не увидит сами переменные, но сервер идентифицирует злоумышленника как пользователя).


В этом суть. Вы можете узнать больше в руководстве по PHP по обоим предметам.

Призрак Мадары
источник
1
Значит ли это, что файлы cookie должны быть включены, чтобы сеансы работали?
bigpotato
1
@ Эдмунд: В большинстве случаев да. Однако вы можете настроить его так, чтобы идентификаторы сеансов передавались через переменную GET (что означало бы, что session_id нужно было бы добавлять к каждой странице ( hello.php?sid=cbe709ac7bed98f7ecb89713)
Призрак Мадары
Что именно означает закрыть браузер на устройствах Android или iPhone? остановить приложение? выключить устройство? закрыть все вкладки и выйти? и т. д.
Вандервальс
2
@SurajJain Было бы, если бы не куки «запомнить меня», которые сохраняются дольше.
Призрак Мадары
4
другой вопрос: когда пользователь закрывает браузер, как сервер получает уведомление об этом событии, чтобы сервер удалял этот идентификатор сеанса? или он истекает автоматически через некоторое время?
user2774480