php会将会话文件从服务器1(debian lenny php 5.2)迁移到新服务器(debian squeeze php 5.3)后截断会话文件为零。
我使用createsession.php(请参阅下文)在服务器1上创build会话,并可以在同一台服务器上使用dumpsession.php查看会话的内容。
在将会话文件从服务器1复制到其他服务器并通过更改我的本地主机文件切换到服务器2之后,我仍然使用存储在浏览器中的正确会话标识的cookie,新服务器访问正确的会话文件,但服务器不会显示会话的内容,而是将会话文件截断为零,并使用相同的会话标识开始新的会话。
有可能迁移会话文件? 是serverip以某种方式散列到sessiondata?
是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="
编辑:我的解决scheme是切换回debian lenny。
如果它改变了,我会很惊讶(没有检查我自己)。
如果将会话文件复制到/ tmp,会发生什么情况:
$s=('/tmp/sess_' . session_id); print_r(unserialize(substr($s, strpos($s, '|')+1)));
我认为与serialize()格式的改变相比,会话文件格式可能有所改变,所以只使用自己的会话处理程序可能会解决问题。
无论如何 – 如果你在多台机器上运行这个网站,你应该尽量在每一台机器上保留相同的configuration软件 – 这会使生活变得简单得多。
你可以通过删除php5-suhosin包来解决这个问题。
aptitude remove --purge php5-suhosin
显然,它的一个新function是encryption会话数据,这是从lenny升级到squeeze时启用的。
我花了相当长的时间来解决这个问题!