Файли cookie та сесії


189

Я почав використовувати PHP пару місяців тому. Для створення системи входу для свого веб-сайту я читав про файли cookie та сеанси та їх відмінності (файли cookie зберігаються у браузері користувача та сеанси на сервері). У той час я віддав перевагу файлам cookie (а хто не любить файли cookie ?!) і просто сказав: "кого це цікавить? Я не маю нічого доброго зі збереженням його на своєму сервері", тож я продовжив використання файлів cookie для мій проект випускника бакалавра. Однак, зробивши більшу частину мого додатка, я почув, що для конкретного випадку зберігання ідентифікатора користувача сеанси є більш підходящими. Тож я почав думати, що б я сказав, якщо журі запитає мене, чому ви використовували файли cookie замість сесій? У мене є саме ця причина (що мені не потрібно зберігати внутрішню інформацію про користувача).? чи це більше того?
Скажіть, будь ласка, про переваги / недоліки використання файлів cookie для збереження ідентифікатора користувача?

Дякуємо вам усім у StackOverflow!


2
Обидва способи зберігають дані . Файли cookie роблять це на стороні клієнта, тобто на зберіганні пристроїв відвідувачів. Сесії - це розумне "розширення", оскільки вони зберігають лише унікальний ідентифікатор на стороні клієнта та всі фактичні дані на стороні сервера. Коли вони отримують унікальний ідентифікатор від файлу cookie клієнта, вони знають, які дані завантажувати на сервер. У більшості випадків сеанси будуть те, що вам потрібно. До речі, ви можете керувати обома за допомогою github.com/delight-im/PHP-Cookie більш сучасним способом.
каре

Вбік ядра WordPress кілька років тому відмовилася від використання сесій і тепер використовує виключно файли cookie . Цікаво. Цікаво, чи зробили вони це для полегшення розгортання набору серверів, збалансованих навантаженням та / або для зменшення випадкових виходів із-за сеансу збору сміття.
Саймон Схід

Відповіді:


230

Концепція зберігає постійні дані для завантаження сторінок для веб-відвідувача. Файли cookie зберігають його безпосередньо на клієнті. Сесії використовують файли cookie як ключовий тип, щоб пов’язати з даними, які зберігаються на стороні сервера.

Переважно використовувати сеанси, оскільки фактичні значення приховані від клієнта, і ви контролюєте, коли дані закінчуються та стають недійсними. Якби все базувалося на файлах cookie, користувач (або хакер) може маніпулювати своїми файлами cookie, а потім відтворювати запити на ваш сайт.

Редагувати: Я не думаю, що використання файлів cookie не має жодної переваги, окрім простоти. Подивіться на це так ... Чи має у користувача будь-які причини знати свій ідентифікатор №? Зазвичай я б сказав «ні», користувач не має потреби в цій інформації. Надання інформації має бути обмежене на основі необхідності знати. Що робити, якщо користувач змінить файл cookie на інший ідентифікатор, як відповість ваша програма? Це ризик для безпеки.

До того, як сеанси були люті, я в основному мав власну реалізацію. Я зберігав унікальне значення файлу cookie на клієнті і зберігав свої постійні дані в базі даних разом із цим значенням cookie. Потім на запитах сторінок я відповідав цим значенням і мав свої постійні дані, не даючи клієнту контролювати, що це було.


29
@JiminyCricket Я не думаю, що це правда ... якщо так, ніхто не використовує змінні сеансу для зберігання поточно зареєстрованого користувача - і всі це роблять. Це було б величезним ризиком для безпеки. Досить впевнений, що зазвичай ідентифікатор сеансу зберігається як cookie на клієнтській машині, а потім узгоджується на сервері з даними сеансу. Зазвичай сервер не контролює сеанси за допомогою IP-адреси, а через значення cookie.
Джон М.

1
Нещодавно я нещодавно знову почав використовувати лише файли cookie, тільки тому, що сеанси змушують завантажувати сторінки, якщо в даний час виконується ще один сеанс, за винятком випадків, коли ви попередньо використовуєте кожну сторінку, session_write_close();коли вам це потрібно. Розгортання власного унікального ідентифікатора та зіставлення із звичайними файлами cookie було не так вже й складно, і всі сторінки залишаються красивими та швидкими.
Брайан Лейшман

Як ви вважаєте, я повинен використовувати сеанси для аутентифікації? Чи є якісь ризики для безпеки? Як щодо хакера намагається змінити свій ідентифікатор сеансу, як би відповів сервер (припустимо, припущенний ідентифікатор сесії дійсний)?
O-BL

Використовуйте сеанс, а потім 2FA як сеанс може бути викрадений.
Закір Саджиб

120

Основні ідеї для розмежування цих двох.

Сесія:

  1. СІН зберігається на сервері (тобто на стороні сервера)
  2. Безпечніше (через 1)
  3. Термін дії не можна встановити, змінні сеансу закінчуються, коли користувачі закривають браузер. (на сьогоднішній день він зберігається впродовж 24 хвилин як за замовчуванням у php)

Файли cookie:

  1. СІН зберігається у веб-браузері (тобто на стороні клієнта)
  2. Не дуже безпечно, оскільки хакери можуть дістатися та отримати вашу інформацію (через 1)
  3. Термін дії може бути встановлений (див. Setcookies () для отримання додаткової інформації)

Сесія є кращою, коли вам потрібно зберігати короткотермінову інформацію / значення, наприклад змінні для обчислення, вимірювання, запиту тощо.

Файли cookie є кращими, коли вам потрібно зберігати довгострокову інформацію / значення, такі як обліковий запис користувача (так що навіть коли вони вимкнуть комп'ютер на 2 дні, їхній рахунок все одно буде входити в систему). Я не можу придумати багато прикладів файлів cookie, оскільки він не прийнятий у більшості ситуацій.


6
Будьте в курсі: це НЕ хороша відповідь. Це починається цілком нормально, але плутає речі і закінчується дезінформацією. Це не пояснення сеансу проти файлів cookie. Це пояснення файлів cookie сеансу проти сеансу + сеансу. Тільки файли cookie не є бажаними з вказаних причин. З вказаних причин переважніше використовувати файли cookie сеансів + сеансу.
markus

Ще одна помилка полягає в тому, що ви маєте вплив на тривалість сеансу через конфігурацію PHP.
markus

1
Сеанс все ще встановлює файл cookie у веб-переглядачі користувача, тому пояснення цього боку сервера-клієнта не є точним
Zalaboza

Закінчення сеансів можна легко встановити будь-якою програмою. 3-й пункт неправильний. Крім того, ви забули кількість даних, які можна зберігати в файлах cookie та сесії. Це більш вагомий момент
saran3h

1
Що означає СІН?
Саймон Схід

45
SESSIONS ENDS WHEN USER CLOSES THEIR BROWSER,

COOKIES END DEPENDING ON THE LIFETIME YOU SET FOR IT. SO THEY CAN LAST FOR YEARS

Це головна різниця у вашому виборі,

Якщо ви хочете, щоб ідентифікатор запам'ятовувався надовго, тоді вам потрібно використовувати cookie; в іншому випадку, якщо ви просто хочете, щоб веб-сайт розпізнавав користувача лише за цей візит, тоді сеанси - це шлях.

Сеанси зберігаються у файлі, який генерує ваш php-сервер. Щоб запам’ятати, який файл призначений для користувача, php також встановить файл cookie у веб-переглядачі користувача, який містить цей ідентифікатор файлу сеансу, щоб у наступному відвідуванні php прочитав цей файл та перезавантажив сеанс.

Тепер php за замовчуванням очищає сеанси кожного інтервалу, а також іменування конвенції сеансу змушує її автоматично закінчуватися. Крім того, веб-переглядачі не зберігатимуть файл cookie, який містить ідентифікатор сеансу після закриття браузера або очищення історії.

Важливо зазначити, що в даний час браузери також підтримують інший тип двигунів зберігання даних, такі як LocalStorage, SessionStorage та інші двигуни webdb, котрий код JavaScript може використовувати для збереження даних на вашому комп'ютері, щоб запам'ятати вас. Наприклад, якщо ви відкриєте консоль javascript всередині Facebook, і введете "localStorage", ви побачите всі змінні, якими користується Facebook, щоб запам'ятати вас без файлів cookie.


16
Насправді, за замовчуванням сеанс триває, поки користувач не закриє свій веб-переглядач, АЛЕ це можна змінити у файлі php.ini, змінивши 0 у session.cookie_lifetime = 0 на кількість секунд, за які ви хочете тривати сеанс, або на використовуючи session_set_cookie_params ().
DOK

1
Подальша корисна інформація, таке запитання, на яке ви отримаєте багато відповідей .. чудово, ще раз дякую DOK!
Nadjib Mami

1
Також пам’ятайте, що єдину точку файлів сеансу відмови можуть створити. Коли навіть найменша атака стилю dos відбувається через проксі, ip-комутатор або зомбі, на жорсткому диску вашого сервера або ssd створюється файл сеансу. Якщо ви не можете йти в ногу з прочитаним, ваш сайт знизиться.
Шон Е Картер

може хто-небудь розмови: "СЕССІЇ ВКЛЮЧАЄТЬСЯ, коли КОРИСТУВАЧ КОРИСТУВАННЯ ЙОГО БРУСЕРА" 1. що робити, якщо користувач переходить awya зі сторінки .. потім повертається назад, не закриваючи браузер. 2. що робити, якщо у них відкрито кілька вікон / вкладок браузера, що вказують на один і той же сайт? деякі веб-додатки на роботі заплутуються в цій ситуації, але я не знаю, який тип файлів cookie вони використовують.
jcansell

1
@jcansell добре, файл cookie не заплутається за допомогою декількох вкладок або навігації, у такому випадку, швидше за все, ці веб-сторінки використовували локальне зберігання / сеанс для зберігання даних за допомогою javascript
Zalaboza

20

коли ви зберігаєте #ID як cookie для розпізнавання ввійшли користувачів, ви фактично показуєте користувачам дані, які не пов’язані з ними. Крім того, якщо третя сторона спробує встановити випадкові ідентифікатори як дані cookie у своєму браузері, вони зможуть переконати сервер у тому, що вони є користувачем, а вони насправді не є. Це брак безпеки.

Ви використовували файли cookie, і, як ви сказали, ви вже завершили більшу частину проекту. крім того, cookie має привілей залишатися надовго, тоді як сеанси закінчуються швидше. Тож сеанси в цьому випадку не підходять. Насправді багато відомих і популярних веб-сайтів і сервісів використовують файли cookie, і ви можете залишатись увійти в систему на довгий час. Але як можна використовувати їх метод для створення більш безпечного процесу входу?

ось ідея: ви можете допомогти у використанні файлів cookie. Якщо ви використовуєте випадкові ключі замість ідентифікаторів для розпізнавання зареєстрованих користувачів, по-перше, ви не просочуєте свої основні дані випадковим користувачам, по-друге, якщо ви вважаєте, що випадкові ключ досить великий, кому важче буде відгадати ключ або створити випадковий. наприклад, ви можете зберегти такий ключ довжиною 40 у браузері користувача: "KUYTYRFU7987gJHFJ543JHBJHCF5645UYTUYJH54657jguthfn", і буде менше шансів, що хтось створить точний ключ і зробить вигляд, що хтось інший.


1
Приємне пояснення. Я використовую GUID в маркері для розпізнавання окремих користувачів.
Картик

17

Коротка відповідь

Правила, упорядковані за пріоритетом:

  • Правило 1. Ніколи не довіряйте введенню користувача: cookie не є безпечними. Використовуйте сеанси для конфіденційних даних.
  • Правило 2. Якщо постійні дані повинні залишатися, коли користувач закриває браузер, використовуйте файли cookie.
  • Правило 3. Якщо постійні дані не повинні залишатися, коли користувач закриває браузер, використовуйте сеанси.
  • Правило 4. Прочитайте детальну відповідь!

Джерело: https://www.lucidar.me/en/web-dev/sesions-or-cookies/


Детальна відповідь

Печиво

  • Файли cookie зберігаються на стороні клієнта (у веб-переглядачі відвідувача).
  • Файли cookie не є безпечними: читати та записувати вміст файлів cookie досить просто.
  • Використовуючи файли cookie, ви повинні повідомляти відвідувачів відповідно до європейських законів (GDPR).
  • Термін дії може бути встановлений, але користувач або браузер може змінити його.
  • Користувачі (або браузер) можуть (налаштувати) відмовитись від використання файлів cookie.

Сесії

  • Сесії зберігаються на стороні сервера.
  • У сесіях використовуються файли cookie (див. Нижче).
  • Сесії безпечніші, ніж файли cookie, але не є непереборними.
  • Термін дії задається в налаштуваннях сервера (наприклад, php.ini).
  • Час закінчення терміну придатності становить 24 хвилини або коли браузер закритий.
  • Термін дії закінчується, коли користувач оновлює або завантажує нову сторінку.
  • Користувачі (або браузер) можуть (налаштувати) відмовитися від використання файлів cookie, тому сеанси.
  • Юридично ви також повинні повідомити відвідувачів про печиво, але відсутність прецеденту ще не зрозуміла.

Відповідний вибір

У сесіях використовується печиво! Дані сеансу зберігаються на стороні сервера, але UID зберігається на стороні клієнта у файлі cookie. Це дозволяє серверу співставити даного користувача з правильними даними сеансу. UID захищений і важко зламати, але не є невразливим. Для чутливих дій (зміна електронної пошти чи скидання пароля) не покладайтеся на сеанси та файли cookie: запитайте пароль користувача для підтвердження дії.

Чутливі дані ніколи не повинні зберігатися у файлах cookie (електронні листи, зашифровані паролі, особисті дані ...). Майте на увазі, що дані зберігаються на іноземному комп’ютері, і якщо комп'ютер не є приватним (аудиторії чи аудиторії загального користування), хтось інший може потенційно прочитати вміст файлів cookie.

Дані пам'ятаючого мене повинні зберігатися у файлах cookie, інакше дані втрачаються, коли користувач закриє браузер. Однак не зберігайте пароль або особисті дані користувача у файлі cookie "запам'ятати мене". Зберігайте дані користувачів у базі даних та пов'язуйте ці дані із зашифрованою парою ідентифікатора / ключа, що зберігається у файлі cookie.

Розглянувши попередні рекомендації, нарешті наступне питання - це те, що допомагає вам вибрати між файлами cookie та сеансами:

Чи повинні зберігатися постійні дані, коли користувач закриває браузер?

  • Якщо відповідь " так" , використовуйте файли cookie .
  • Якщо відповідь « ні» , використовуйте сеанси .

13

Насправді, сесія та файли cookie - це не завжди окремі речі. Часто, але не завжди, сеанс використовує файли cookie.

У цих інших питаннях є кілька хороших відповідей на ваше запитання. Оскільки ваше запитання стосується збереження споживачів ін'єкційних наркотиків (або ідентифікатора), я не думаю, що він є цілком копією цих інших питань, але їх відповіді повинні вам допомогти.

cookie vs сеанс

Кеш VS Session VS cookies?

Яка різниця між сесією та файлом cookie?


10

Я особисто використовую як cookie, так і сеанс.

Файли cookie використовуються лише тоді, коли користувач натискає прапорець "Запам'ятати мене" . а також файли cookie шифруються, а дані розшифровуються лише на сервері. Якщо хтось намагається відредагувати файли cookie, наш дешиптер зможе виявити його та відхилити запит.

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

Дякую,


2

Сесія та Cookie - це не одне і те ж.

Сеанс використовується для зберігання інформації з веб-сторінок. Зазвичай веб-сторінки не мають пам’яті, щоб зберігати цю інформацію. Але за допомогою ми можемо зберегти необхідну інформацію.

Але Cookie використовується для ідентифікації користувачів. За допомогою файлу cookie ми можемо зберігати дані. Це невелика частина даних, яка зберігатиметься у веб-браузері користувача. Тому кожен раз, коли користувач переглядає браузер наступного разу, надсилає назад інформацію про файли cookie на сервер для отримання попередніх дій.

Кредити: сесія та печиво


Що робити, якщо користувач відключив файли cookie? Як cookie визначає користувача?
SohailRajput

1

Сесії дозволяють зберігати окремі фрагменти інформації так само, як і файли cookie, але дані зберігаються на сервері замість клієнта.


0

Як говорили інші, сесії розумні і мають більше переваг приховувати інформацію від клієнта.

Але Cookie все ще має принаймні одну перевагу , ви можете отримати доступ до файлів cookie з Javascript (наприклад, ngCookies ). За допомогою PHP-сеансу ви не можете отримати доступ до нього будь-де поза скриптом PHP.


1
Ви можете .. Не безпосередньо, звичайно, наведіть курсор, ви можете отримати доступ до нього через запит ajax до сценарію, який повертає дані сеансу. Але я не впевнений, що слід.
l00k

0

Я виберу сесію, насамперед сесія є більш безпечною, ніж файли cookie, файли cookie - це дані про клієнтські сайти, а сеанс - це дані про серверні сайти. Файли cookie використовуються для ідентифікації користувача, оскільки це невеликі шматочки коду, вбудовані в мій сервер із браузером комп'ютера користувача. З іншого боку, сесія допоможе вам захистити вашу особу, оскільки веб-сервер не знає, хто ви є, тому що HTTP-адреса змінює стан 192.168.0.1 на 765487cf34ert8ded… .. або щось інше число за допомогою методів GET і POST. Сесія зберігає дані користувача в унікальному сеансі ідентифікації, який навіть ідентифікатор користувача не може співпадати один з одним. Сесія зберігає інформацію про одного користувача на всіх сторінках однієї програми. Термін дії файлів cookie встановлюється за допомогою setcookies (), тоді як термін дії сеансу не встановлений, він закінчується, коли користувачі вимикають браузери.


0

Сеанс - це група інформації на сервері, яка пов'язана з інформацією про cookie. Якщо ви використовуєте PHP, ви можете перевірити сеанс. зберегти місце розташування шляху та фактично "переглянути сеанси". Файл cookie - це фрагмент даних, що надсилаються та повертаються клієнтам. Файли cookie часто використовуються для полегшення сеансів, оскільки вони повідомляють серверу, який клієнт обробляв, який сеанс. Є й інші способи зробити це (магія рядків запитів тощо), але печиво, ймовірно, є найбільш поширеним для цього.

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