php 会话文件不兼容? - php5.2 debian lenny vs php5.3 debian squeeze

php 会话文件不兼容? - php5.2 debian lenny vs php5.3 debian squeeze

将会话文件从服务器一(debian lenny php 5.2)迁移到新服务器(debian squeeze php 5.3)后,php 将会话文件截断为零。

我使用 createsession.php 在服务器一上创建一个会话(见下文),并且可以使用同一服务器上的 dumpsession.php 查看会话的内容。

将会话文件从服务器一复制到另一台服务器,并通过更改本地主机文件切换到服务器二之后,我仍然拥有存储在浏览器中具有正确会话ID的相同cookie,新服务器访问正确的会话文件,但服务器不会显示会话的内容,而是将会话文件截断为零并使用相同的会话ID启动新会话。

是否可以迁移会话文件?serverip 是否以某种方式散列到会话数据中?

php5.2 和 php5.3 之间可以共享会话吗?

创建会话.php

<?php
  session_name('mysession');
  session_start();
  var_dump(session_id());
  var_dump($_SESSION);
?>

转储会话.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。

答案1

如果它发生了变化,我会感到非常惊讶(没有权限亲自检查)。

如果将会话文件复制到 /tmp,会发生什么情况:

$s=('/tmp/sess_' . session_id);
print_r(unserialize(substr($s, strpos($s, '|')+1)));

我认为会话文件格式发生改变的可能性比 serialize() 格式的改变更大 - 因此只需使用您自己的会话处理程序就可以解决问题。

无论如何 - 如果您在多台机器上运行网站,您应该尝试在每台机器上保留相同的配置软件 - 这会让生活变得简单很多。

答案2

您可以通过删除php5-suhosin包裹。

aptitude remove --purge php5-suhosin

显然它的新功能之一是加密会话数据,此功能在您从 lenny 升级到 squeeze 时启用。

我花了很长时间来解决这个问题!

相关内容