Zend Session DB обработчик и сериализованные данные - PullRequest
1 голос
/ 11 февраля 2011

Мы используем Zend Framework 1.7 в проекте (я знаю, что он старый) и просто внесли изменения, чтобы переместить данные сеанса из файлов в базу данных.Похоже, что это работает нормально в обеих средах, в которых мы его развернули.

Однако есть одно большое отличие: в среде A (PHP 5.2) данные сеанса хранятся в виде сериализованного открытого текста, например:

key|[php serialized array]

В среде B (PHP 5.3) данные, похоже, как-то кодируются в base64:

IpgJ4fbSZ0v2qi4RmGcgQ9tP7YEUyN1R9-7oroGl4071fnlk_UVkkrkUcpdHdw_UsRYy-6NpL61gTuL2Htcmv3HU5UM3ClwSDndY40kyimDPs3SdS7gNHwhwdpailLOfrIxqV48hZDhNHKlIpSX2QZm0jOHjRhZc2kjXnMgqioLqJiDdgyUCRnqKcZ_ZtBISq8BAZARW61P5Ls_ZSO506ltuNqIJIJGkV2R7qvDKLLCtxUQUwd7P8IlJiC7iq_Q4GIn3gMr0KwAHLP6adzxSusVk5begrx9lBk9Dxp8KkJ8Gx8rfKJfvVBIJKZgmsFsWq41dV0J4y1Lgihvx9nU73g..

Кажется, что обе среды работают иначе, но мне нужно убедиться, чтомы понимаем, почему это происходит, и я не могу найти где-либо документацию или подобную ситуацию.Я предполагаю, что на это влияет разница в версии PHP и / или конфигурации в php.ini, но я не знаю, как это сделать.

1 Ответ

3 голосов
/ 12 марта 2011

У меня была такая же проблема сегодня на кластерном сервере, на одном у меня был php 5.2, а на другом php 5.3.

Мое первоначальное предположение было также проблемой с версией, но я обнаружил, что suhosin былпроблема с шифрованием сеанса.

Вы можете расшифровать сеанс, просто на том компьютере, на котором он был зашифрован;чтобы сделать это, вы должны изменить следующее в своем php.ini:

suhosin.session.encrypt = on
suhosin.cookie.encrypt = on
session.save_handler = files
session.save_path = /tmp

и позже написать скрипт вроде:

$data = $argv[1];
$sessid = 'recovering';
file_put_contents("/tmp/sess_{$sessid}", $data);

session_id($sessid);
session_start();
print_r($_SESSION);

, который будет копировать только зашифрованную строку в файл sessи распечатывать содержимое (вы можете сериализовать, чтобы соответствовать нормальному поведению сеанса)

Конечно, если позже вы захотите, чтобы php не шифровал через suhosin, вам нужно установить .encrypt = off

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...