HTTP - це протокол без громадянства. Сеанси зварюють стан на HTTP. Як правило, уникайте використання стану сеансу.
ОНОВЛЕННЯ: Не існує концепції сеансу на рівні HTTP; сервери надають це, надаючи клієнтові унікальний ідентифікатор і кажучи клієнту повторно подати його на кожен запит. Тоді сервер використовує цей ідентифікатор як ключ до великого хештелю об'єктів Session. Кожного разу, коли сервер отримує запит, він шукає інформацію про сеанс з його хеш-пам’яті об’єктів сеансу на основі ідентифікатора, який клієнт подав із запитом. Вся ця додаткова робота - це подвійна розвага щодо масштабованості (велика причина, що HTTP без громадянства).
- Whammy One: Це зменшує роботу одного сервера.
- Whammy Two: Це ускладнює масштабування, тому що зараз ви не можете просто направити запит на будь-який старий сервер - вони не мають однакового сеансу. Ви можете зафіксувати всі запити із заданим ідентифікатором сеансу на одному сервері. Це непросто, і це єдина точка відмови (не для системи в цілому, а для великих груп користувачів). Або ви можете розділити сховище сеансу на всіх серверах кластеру, але тепер у вас є більш складнощі: мережева пам'ять, окремий сервер сеансів тощо.
Враховуючи все це, чим більше інформації ви будете вносити в сеанс, тим більший вплив на продуктивність (як вказує Вінко). Також, як вказує Вінко, якщо ваш об’єкт не може бути серіалізабельним, сеанс буде погано поводитися. Тож, як правило, уникайте більше, ніж абсолютно потрібно, на сеанс.
@Vinko Зазвичай ви можете обійти стан зберігання сервера, вставивши дані, які ви відстежуєте, у відповідь, яку ви надсилаєте назад, і змусивши клієнта повторно подати їх, наприклад, надсилаючи дані в прихованому вході. Якщо вам дійсно потрібно відстеження стану на сервері, воно, ймовірно, повинно бути у вашому резервному сховищі даних.
(Вінко додає: PHP може використовувати базу даних для зберігання інформації про сеанси, і якщо клієнт повторно надсилає дані кожного разу, може вирішити потенційні проблеми масштабованості, але відкриває велику проблему з безпекою, на яку ви повинні звернути увагу, коли клієнт контролює всі ваша держава)