欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

memcached - php 实现 memcache 存储 session 的问题

程序员文章站 2022-04-30 17:00:12
...
首先把 session.save_handler = user,注意不是 memcache。

然后自定义类 Session 实现 SessionHandlerInterface 接口,创建对象,session_set_save_handler 注册,这样每次比如:

$_SESSION['aaa'] = '123';

的时候,php 就会调用通过 Session->write(),函数中我自己人为往 memcache 中插入 sess- 为前缀,session_id() 为后缀的记录,比如:key = sess-4fqrbhed9f3grq4p4ssbljg867。

这时候有个很奇怪的问题,每次我跟着 $_SESSION['aaa'] = '123'; 这条,去 memcache 中取这个 session_id() 对应的数据时都可以获取到,但是删除 $_SESSION['aaa'] = '123'; 之后 memcache 中数据就被自动删掉了。

回复内容:

首先把 session.save_handler = user,注意不是 memcache。

然后自定义类 Session 实现 SessionHandlerInterface 接口,创建对象,session_set_save_handler 注册,这样每次比如:

$_SESSION['aaa'] = '123';

的时候,php 就会调用通过 Session->write(),函数中我自己人为往 memcache 中插入 sess- 为前缀,session_id() 为后缀的记录,比如:key = sess-4fqrbhed9f3grq4p4ssbljg867。

这时候有个很奇怪的问题,每次我跟着 $_SESSION['aaa'] = '123'; 这条,去 memcache 中取这个 session_id() 对应的数据时都可以获取到,但是删除 $_SESSION['aaa'] = '123'; 之后 memcache 中数据就被自动删掉了。

修改php.ini
session.save_handler = memcache
session.save_path = tcp://127.0.0.1:11211;tcp://127.0.0.1:11212;tcp://127.0.0.1:11213

已解决,原因是未实现 SessionHandlerInterface::read() 导致刷新后 $_SESSION 被设置为空值,接着导致调用 write 后写入了这个空值。