Я получаю несогласованную сериализацию сеансов в моей среде разработки и производства.
Код идентичен, синхронизирован с SVN. Конфигурация Apache и PHP в основном идентична, только имя домена отличается. Оба работают с Debian Squeeze, сервер – 64 бит, а разработка – 32 бит.
На сервере сохраненные данные выглядят как закодированные base64, хотя я не уверен, что это:
vvZKW5WEbvvRCs0-M0R8zTDAuTsKZSADKORDemOWOXqPJs0J42l7nZIewsHp8JjGFQw64Xq2x5dB_7187W4HPdJ1Yo5yK6oHvB8ofx7GL82WJCaPrzP8pR1xm02f9HenDaShvy1WTHuMuCSJ3zWGUnjRpOuJtZ49v4Dh2L5U0M4.
Данные сеанса разработки – это обычный стиль PHP:
foo|s:3:"bar";baz|s:6:"wombat";promoter|O:8:"stdClass":0:{}475b17e28b25580bb92430bb286637ddlanguage|s:5:"en_us";
На сервере управление сеансом не работает должным образом, например, переход к субдомену на сайте приводит к повторной инициализации сеанса для всех поддоменов.
Я использую структуру Yii, хотя я устранил это как источник проблемы, скопировав код, найденный здесь в моем файле index.php, прежде чем всякая обработка будет выполняться с помощью фреймворка.
Поэтому мои вопросы: почему это происходит, и как я могу заставить сервер сохранять данные сеанса, такие как среда разработки?
Кстати, я бы предпочел не прибегать к некоторым неприятным взломам вроде:
function writeSession($id,$data) { $data = serialize($_SESSION); .... }
ТИА.
Получив некоторую помощь в этом, разница между двумя серверами заключалась в том, что у одного был установлен пакет suhosin, и он был настроен на шифрование данных сеанса, а другой – нет.
Я установил пакет suhosin на сервере, который его не имел, но он создавал для меня некоторые проблемы, поэтому я отключил функцию шифрования сеанса на обоих серверах. Сейчас все работает так, как ожидалось.
В файле настроек в моем случае /etc/php5/conf.d/suhosin.ini
suhosin.session.encrypt = Off