Що таке файли 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

Який би викликати браузер , щоб встановити кук з ім'ям 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
@Edmund: У більшості випадків так. Однак ви можете встановити його таким чином, щоб ідентифікатори сеансу передавались через змінну GET (що означало б, що session_id потрібно було б додати до кожної сторінки ( hello.php?sid=cbe709ac7bed98f7ecb89713)
Привид

Що саме означає закрити браузер на пристроях Android або iPhone? зупинити додаток? вимкнути пристрій? закрити всі вкладки і вийти? і т. д.
Вандервалс

2
@SurajJain Якби не файли cookie "пам'ятати мене", вони зберігалися б довше.
Привид

4
інше питання: Коли користувач закриває браузер, як сервер отримує повідомлення про цю подію, щоб сервер видалив цей ідентифікатор сеансу? чи термін його дії закінчується автоматично через деякий час?
user2774480
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.