В технических интервью нас часто спрашивают "в чем разница между файлами cookie и сеансами". Все знают, что сеансы безопаснее, чем файлы cookie. Сеансы хранятся на стороне сервера, а файлы cookie - на стороне клиента. Однако, если вы хотите объяснить поподробнее боюсь не так понятно.
Что такое HTTP
Прежде всего, давайте представим, что такое HTTP
HTTP — это протокол без сохранения состояния, что означает, что он не может различать и управлять запросами и ответами по состоянию. То есть сервер не может узнать личность клиента только по сетевому соединению.
Но что делать? Просто выдайте клиентам пропуск, по одному на каждого человека, и каждый посетитель должен принести свой пропуск. Это позволяет серверу проверять личность клиента по паспорту. Вот как работают файлы cookie.
1.Cookie
что такое печенье
Cookie переводится как «куки», Cookie — это механизм для клиента, чтобы сохранить информацию о пользователе, который используется для записи некоторой информации о пользователе.локальная машинаНебольшой фрагмент текста, хранящийся на сервере и отправляемый на сервер с каждым запросом.
Технология файлов cookie контролирует состояние клиента, записывая информацию о файлах cookie в сообщения запроса и ответа.
Файл cookie уведомит клиента о сохранении файла cookie в соответствии с информацией поля заголовка Set-Cookie в ответном сообщении. Когда клиент снова инициирует запрос к серверу, клиент автоматически добавит значение Cookie в сообщение запроса и отправит его.
После того, как сервер найдет файл cookie, отправленный клиентом, он проверит запрос, отправленный клиентом, а затем запишет на сервере и, наконец, получит предыдущую информацию о состоянии.
Клиент инициирует запрос после сохранения файла cookie
Во-первых, очевидно, что в поле заголовка нет информации, относящейся к файлам cookie, а во-вторых, вы также можете увидеть информацию в set-Cookie, которая представляет собой информацию о файлах cookie, поддерживаемую сервером.
После просмотра запроса информация о файлах cookie автоматически отправляется в сообщении запроса.
Свойства поля set-Cookie
Set-Cookie: logcookie=3qjj; expires=Wed, 13-Mar-2019 12:08:53 GMT; Max-Age=31536000; path=/;
domain=fafa.com;secure; HttpOnly;
На примере set-cookie выше, давайте поговорим о свойствах set-cookie
1.logcookie=3qjj
Имя и значение файла cookie, logcookie — имя, 3qjj — значение.
2.expires — установить срок действия куки. Когда атрибут expires опущен, файл cookie действителен только до закрытия браузера. Переписывая просроченный файл cookie и устанавливая время истечения срока действия файла cookie равным прошедшему времени, можно реализовать существенную операцию удаления файла cookie клиента.
3.path — это файловая директория, которая ограничивает диапазон отправки указанного файла cookie. Однако есть и другие способы обойти это ограничение, и, похоже, нельзя ожидать его эффективности как механизма безопасности.
4.domain Имя домена, указанное в атрибуте домена, может совпадать с окончанием. Например, если указан домен fafa.com, отличный от fafa.com, то www.fafa.com может отправлять файлы cookie.
5.secure Настройте веб-страницу на отправку файлов cookie только при безопасном соединении HTTPS. HHTP не может быть переработан.
6.HttpOnly Предотвращает получение файлов cookie сценариями JavaScript.С помощью указанных выше настроек файлы cookie обычно можно прочитать с веб-страницы. Но с помощью JavaScript document.cookie невозможно прочитать содержимое файла cookie с прикрепленным атрибутом HttpOnly.
2. Управление сеансом и применение файлов cookie
Что такое сессия
Выше я упомянул, что значение id сеанса будет сгенерировано, когда сервер выполнит механизм сеанса, и это значение id будет отправлено клиенту, значение id будет сохранено на стороне клиента, а сохраненный контейнер — это файл cookie. , поэтому, когда мы полностью отключим cookie браузера, сеанс на стороне сервера не будет работать должным образом.
Сеанс в PHP использует файл cookie клиента для сохранения идентификатора сеанса по умолчанию, поэтому, когда возникает проблема с файлом cookie клиента, это влияет на сеанс. Следует отметить, что: сеанс не обязательно должен полагаться на файлы cookie, что также является преимуществом сеанса по сравнению с файлами cookie. Когда клиентский файл cookie отключен или возникла проблема, PHP автоматически прикрепит идентификатор сеанса к URL-адресу, чтобы переменную сеанса можно было использовать на разных страницах через идентификатор сеанса.
1. Клиент помещает информацию в сущность сообщения и обычно отправляет запрос на сервер методом POST.
2. Сервер выдаст идентификатор сеанса для идентификации пользователя. Верификация выполняется путем проверки информации, отправленной от клиента, а затем статус аутентификации пользователя привязывается к идентификатору сеанса и записывается на стороне сервера. При возврате ответа клиенту идентификатор сеанса (например, PHPSESSID=l128ogl…) будет записан в поле заголовка Set-Cookie. Вы можете думать об идентификаторе сеанса как об уникальном идентификаторе, используемом для различения разных пользователей.
Шаг 3: После того, как клиент получит идентификатор сеанса, отправленный с сервера, он сохранит его локально в виде файла cookie. В следующий раз, когда запрос будет отправлен на сервер, браузер автоматически отправит файл cookie, поэтому идентификатор сеанса также будет отправлен на сервер. Сторона сервера может проверить статус, проверив полученный идентификатор сеанса.
3. Разница между файлом cookie и сеансом
- Данные куки хранятся в клиентском браузере (клиенте), а данные сеанса хранятся на сервере, но реализация сеанса на стороне сервера зависит от куки клиента;
- Файлы cookie не очень безопасны. Другие могут анализировать файлы cookie, хранящиеся локально, и выполнять подделку файлов cookie. Учитывая безопасность, следует использовать сеанс;
- Сессия будет сохранена на сервере в течение определенного периода времени. Когда доступ увеличится, он поднимет производительность вашего сервера. Принимая во внимание снижение производительности сервера, следует использовать файлы cookie;
- Максимальный размер одного файла cookie на стороне клиента составляет 3 КБ, что означает, что сайт не может хранить более 3 КБ файлов cookie на стороне клиента;