PHP7 Session存入memcache失败

PHP 设置session 存储在memcache:

  • 方法I: 在 php.ini 中全局设置

    1
    2
    session.save_handler = memcache
    session.save_path = "tcp://127.0.0.1:11211"
  • 方法II: 某个目录下的 .htaccess :

    1
    2
    php_value session.save_handler "memcache"
    php_value session.save_path "tcp://127.0.0.1:11211
  • 方法III: 再或者在某个一个应用中:

    1
    2
    ini_set("session.save_handler", "memcache");
    ini_set("session.save_path", "tcp://127.0.0.1:11211");

    使用多个 memcached server 时用逗号”,”隔开,并且和 Memcache::addServer() 文档中说明的一样,
    可以带额外的参数”persistent”、”weight”、”timeout”、”retry_interval” 等等,
    类似这样的:”tcp://host1:port1?persistent=1&weight=2,tcp://host2:port2” 。

遇到问题:

今天同事说服务器上的session无法读取,具体现象如下:

本地PHP版本5.x 上述操作方法I, 可以正常存储/获取session.

服务器PHP7.2 上述操作方法I, 存储获取session失败.

解决办法:

之前从PHP5一直用的是memcache扩展,感觉应该是PHP7和这个扩展兼容性之类的问题,并在本地做了测试,

memcache扩展+PHP7.2 复现,

memcached扩展+PHP7.2解决

以下任选一个:
  1. 更改存储方式为文件 session.save_handler = file;
  2. 更换扩展memcache 更改为 memcached, 修改对应配置文件为:

    1
    2
    ini_set("session.save_handler", "memcached"); // 是memcached不是memcache
    ini_set("session.save_path", "127.0.0.1:11211"); // 不要tcp:`

修改完配置文件 记得重启一下服务