php 5.3->;5.6 memcacheD扩展会话兼容性问题


php 5.3 --> 5.6 memcacheD extension sessions compatibility issues

当我从php 5.3-->php 5.6升级并使用具有相同序列化和配置设置的相同版本的memcacheD扩展时,会话不再有效。

即使设置相同;我的会话数据在php版本升级之间不会持久存在。(我有负载平衡的服务器,能够在它们之间进行测试)

PHP序列化在PHP 5.3和5.6之间不兼容。破坏PHP的更改说:"如果传递的序列化数据被操纵,试图在不调用其构造函数的情况下实例化对象,那么unserialize()现在将失败。"

然而,我发现当一个版本反序列化另一个版本序列化的内容时,序列化通常会中断。我们在Memcached和数据库记录中缓存的序列化数据遇到了这个问题,其中多个版本的PHP试图访问相同的序列化数据。

http://php.net/manual/en/migration56.changed-functions.php

解决方案是不使用PHP序列化,而是使用JSON或其他一些标准化的数据序列化。

我们必须编写一个"翻译"步骤,既可以读取两个版本的数据,也可以写入我们要使用的新数据序列化格式(在我们的实例中为JSON)。