php обрезает файлы сеанса до нуля после переноса файлов сеанса с первого сервера (debian lenny php 5.2) на новый сервер (debian squeeze php 5.3).
Я создаю сеанс на первом сервере с помощью createsession.php (см. ниже) и могу просматривать содержимое сеанса с помощью dumpsession.php на том же сервере.
после копирования файлов сеанса с одного сервера на другой и переключения на второй сервер путем изменения файла моих локальных хостов у меня все еще остается тот же файл cookie с правильным идентификатором сеанса, хранящийся в браузере, новый сервер обращается к правильному файлу сеанса, но вместо отображения содержимого сеанса сервер обрезает файл сеанса до нуля и запускает новый сеанс с тем же идентификатором сеанса.
можно ли перенести файлы сеанса? serverip каким-то образом хешируется в данные сеанса?
возможно ли разделение сеанса между php5.2 и php5.3?
createsession.php
<?php
session_name('mysession');
session_start();
var_dump(session_id());
var_dump($_SESSION);
?>
dumpsession.php
<?php
session_name('mysession');
session_start();
var_dump(session_id());
$_SESSION['foo'] = 'bar';
?>
часть сеанса php.ini
[Session]
session.save_handler = files
session.save_path = "3;/var/lib/php5"
session.use_cookies = 1
session.name = PHPSESSID
session.auto_start = 0
session.cookie_lifetime = 0
session.cookie_path = /
session.cookie_domain =
session.cookie_httponly =
session.serialize_handler = php
session.gc_divisor = 100
session.gc_maxlifetime = 5184000
session.bug_compat_42 = 1
session.bug_compat_warn = 1
session.referer_check =
session.entropy_length = 0
session.entropy_file =
session.cache_limiter = nocache
session.cache_expire = 180
session.use_trans_sid = 0
session.hash_function = 0
session.hash_bits_per_character = 4
url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=,fieldset="
изменить: мое решение переключилось обратно на debian lenny.
Вы можете исправить это, удалив php5-suhosin пакет.
aptitude remove --purge php5-suhosin
По-видимому, одна из его новых функций - это шифрование данных сеанса, которое было включено при обновлении с lenny до squeeze.
Я просто довольно долго работал над этим!
Я был бы очень удивлен, если бы он изменился (у меня нет доступа, чтобы проверить себя).
Что произойдет, если вы скопируете файл сеанса в / tmp, тогда:
$s=('/tmp/sess_' . session_id);
print_r(unserialize(substr($s, strpos($s, '|')+1)));
Я думаю, что более вероятно, что формат файла сеанса мог измениться по сравнению с изменением формата serialize (), поэтому простое использование вашего собственного обработчика сеанса может решить проблему.
В любом случае - если вы запускаете веб-сайт на нескольких машинах, вам следует попытаться сохранить одно и то же программное обеспечение для настройки на каждом из них - это значительно упрощает жизнь.