【问题标题】:php session serializationphp会话序列化
【发布时间】:2011-12-26 13:11:03
【问题描述】:

我有一台带有 php5.3 + nginx + php-fpm 的服务器和第二台带有 php5.3 + apache2 的服务器。 在 php.ini 的两台服务器上 - session.serialize_handler = php. 在第一个服务器会话上是这样序列化的:

onlineuser|a:2:{s:4:"user";O:8:"stdClass":81:{s:12:"category_ids";s:1:"2";s:2:"id";i:114756;s:5:"utype";i:2;s:6:"passwd";s:32:"...";.......}

第二个服务器会话是这样序列化的:

kP_xItrmVGDX_QFX-49QcYMf0nfnkEZrLSCLhypvPais0DkcFol7zblcQv_U2ET8X_ygrBglUuSGtH9T87nnE-5Nge3sFE0hdF6ZzO1Ba8mu12DAil5a18EPZAW3sb5tEELqaQK5ByGkomONxGUjmdSFkph4pMZR_2Dkg714SK7Wdh5ZZacdiZrGUXt4...............

看起来序列化方法不同。 请告知如何找出原因。

【问题讨论】:

    标签: php session serialization


    【解决方案1】:

    好像您在第二台服务器上安装了 Suhosin PHP 扩展。 如果是,请在它的 php.ini 中将参数“suhosin.session.encrypt”设置为“Off”

    【讨论】:

      【解决方案2】:

      我会检查PHP v5 Changelog,具体我看到:

      • v5.3.3
        • 修复了在 mysqlnd 中处理错误数据包时可能出现的缓冲区溢出问题。 Stefan Esser 报道。 (安德烈)
      • v5.2.14
        • 修复了对某些前缀字符的会话变量序列化处理。由 Stefan Esser(伊利亚)报道

      直觉说这是 PHP 引擎,而不是它所在的服务器,尽管它也可能与特定 PHP 实例加载的二进制文件(y/ies)和/或标志有关。

      您是否直接处理序列化数据(这就是您关心方法的原因)?如果你是,我有点好奇为什么。

      【讨论】:

      • 我正在做负载平衡并将会话保存在 redis 中,然后我需要一个会话用于两台服务器。但序列化方法不同,会话数据丢失。我有第一台服务器 php 5.3.3 和第二台 php 5.3.8
      • 我知道可能在第二台服务器上 php 以标志和会话序列化为二进制开始。对吗?
      猜你喜欢
      • 2013-10-05
      • 1970-01-01
      • 2016-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-09
      • 1970-01-01
      相关资源
      最近更新 更多