Идентификатор сеанса PHP изменяется между страницами

У меня проблема, когда я теряю сессию PHP между 2 страницами.

Session_start () включен в файл с именем session-inc.php на каждую страницу, требующую установки сеанса. Это работает для всех страниц сайта, кроме одной конкретной страницы, member-profile.php. Когда эта страница посещается, вместо нее устанавливается и используется новый сеанс с другим идентификатором (то же имя сеанса).

Еще несколько деталей:

  • Имя сеанса устанавливается вручную
  • Все страницы находятся на одном сервере под тем же именем домена
  • Если я добавлю дополнительный session_start () выше include ('session-inc.php') в файле member-profile.php, сеанс переносится правильно
  • Я попытался установить session_cookie_domain и session.session_name в .htaccess, это сработало для этого домена, но оно прекратило передачу сеанса вне домена оплаты
  • Мы запускаем apache 2.2.6 с php 5.2.5

Включение session_start () над include ('session-inc.php') в файле member-profile.php – это быстрое и грязное исправление для этой проблемы, но мне интересно, знаете ли кто-нибудь, почему это происходит.

ура

Будет

Согласно документации PHP, session_start должен быть вызван до того, как какой-либо вывод будет отправлен обратно в браузер. Может ли эта страница иметь маркировку байтов CR / LF, Unicode или аналогичную, которая вызывает вывод перед include('session-inc.php') ?

При переносе устаревшего сайта с PHP4 на PHP5 я заметил настройку конфигурации php.ini, которая заставляет php автоматически запускать сеанс по каждому запросу. Это альтернатива размещению session_start() на каждой странице …

Существует несколько способов включить этот параметр:

Поместите следующую строку в php.ini:

 session.auto_start = on 

или поместить это в конфигурацию вашего виртуального сайта apache или файл .htaccess:

 <IfModule mod_php5.c> php_flag session.auto_start on </IfModule> 

и он должен сделать изменения $ _SESSION доступными на всех страницах

Я только что столкнулся с этой проблемой. Интересно, что просмотр через http://127.0.0.1 вместо http://localhost помог мне.

Нашел вопрос

В начале основного файла отмечен знак байтового заказа, включающий файл второго домена. как указано ken, can not имеют какой-либо вывод перед началом сеанса, он не устанавливает сеанс правильно.

Найденная проблема заключалась в том, что в начале файла вышла отметка о байтовом порядке (BOM). Из него избавился, и он разобрал проблему с сеансом.

SOLUTION: session.auto_start = on в файле: php.ini

Он решил проблему повторного генерации идентификатора сеанса на странице reload (страницы обновления / изменения страницы).

Проблема появилась после обновления CPanel (и включила Multi PHP), даже версия php осталась прежней.

Файл PHP.ini вообще не имел этой переменной. Пошел в Cpanel -> Редактор INI MultiPHP -> Режим редактора (не Basic, в основном у вас нет этой настройки) и добавил строку. Нажмите Сохранить.

СОВЕТЫ / ПРИ ИСПОЛЬЗОВАНИИ ЭТОГО РЕШЕНИЯ: Чтобы определить, является ли это проблемой, поместите строку в самом начале и в самом конце вашего файла index.php, чтобы проверить идентификатор сеанса. Использовать функцию: session_id (); Навигация по страницам / перезагрузка страницы. Если значение session_id изменяется, проблема не в вашем коде, и это решение должно решить вашу проблему (сеанс потерян за пределами вашего кода).

Я также попытался проверить доступность сеанса сохранения на веб-сервере (session.save_path), но, даже если это был лидер, это было не так. Я предполагаю, что это «функция» Cpanel с MULTIPHP UPDATE, которая будет происходить довольно часто.