Сім причин чому не зберігається сесія у PHP
Коли вебмастер починає працювати з сесіями, він часто стикається з тим, що сесія не зберігається під час переходу на іншу сторінку. Причин може бути безліч, нижче представлений список найбільш поширених, вивчивши які ви зможете вирішити проблему.
Чому не зберігається сесія під час переходу на іншу сторінку?
1. Ви забули запустити сесію
Мабуть, це найпоширеніша причина, чому не зберігається сесія. Запуск сесії за допомогою функції session_start(); має здійснюватисяна кожній сторінці, де використовується сесія. Найкраще session_start(); писати відразу після тега
2. Сесія знищується у коді
Перш ніж пропускати цей пункт і йти далі з думкою «Та ну, марення якась, ніде я сесію не знищую.», переконайтеся, чи справді ви ніде не очищаєте сесію? Знищити сесію можна за допомогою функції session_destroy(); або ви можете очистити значення сесії шляхом наступної конструкції: unset($_SESSION['name']); . Переконайтеся, що цього немає.
3. Сховище сесії недоступне для запису
Для початку перевірте, куди у вас записується сесія. Виконайте phpinfo(); та перегляньте значення параметра session.save_path . Це є директорія, куди зберігається сесія. Зайдіть до неї та подивіться, чи є там файли типу "0Thee5g9vsknDhen14kyYt5lv7" . Якщо файлів немає, то сесія не може зберегтися, перегляньте правильно чи виставлені права доступу до директорії.
4. Після надсилання заголовка не використовується exit();
Якщо на сторінці надсилаються заголовки за допомогою функції header() , необхідно додати конструкцію exit(); або session_write_close(); щоб сесія могла коректно відпрацювати.
5. Cookies не включені до браузера
Переконайтеся,що використання cookies дозволено у браузері, в якому використовується сайт.
6. Редирект з одного домену на інший
При редиректі з одного домену до іншого сесія загубиться. Навіть якщо це один домен і він відрізняється наявністю www, наприклад при перенаправленні з site.com на www.site.com сесія пропаде, переконайтеся, що у вас цього не відбувається.
7. У вас нема favicon.ico
Мабуть, найекзотичніша з усіх перелічених вище причин, чому сесія може не збережуться. Я не знаю чому так відбувається, але якщо у вас немає favicon'а на сайті, браузер Google Chrome може втратити вашу сесію. Це буває не на всіх серверах, подібний глюк я виявив на nginx'і.