素材牛VIP会员
PHP使用Windows下的Memcache做session_handler莫名其妙丢失
 23***om  分类:PHP代码  人气:738  回帖:1  发布于6年前 收藏
症状

有set_session.php和read_session.php两个文件。访问set_session.php,种下session数据。然后访问read_session.php,发现session数据读取正常。不论5分钟后刷新read_sesion.php还是再在别的文件访问,都正常。
但是如果我按住f5键(注意是按住),大约5秒后松开(也就是说浏览器在短时间内刷新了几十、几百次),read_session.php反馈出来的session就为空。这时拿着session_id去memcache里找,发现该key存在,但value为空。

环境

服务器是Windows Server 2003 32bit。使用XAMPP3.1.0,PHP版本是5.4。PHP配置如下:

session.save_handler = memcache
session.save_path = "127.0.0.1:22003"
session.auto_start = 1

MC版本是1.4.4,从http://downloads.northscale.com/memca... 下载的,DLL是http://windows.php.net/downloads/pecl...

诡异之处

我能确定:内存肯定没有满、没有任何其他人访问这台服务器,也没有其他应用运行在上面。
完完全全同样的xampp/php/mc配置,在我本地的windows7(64bit)上面,就没有任何的问题。如果我把服务器上的session_handler换成files,也没有任何的问题。最后我们怀疑是连接数或者win03方面的问题,发现win03在tcp连接上没有限制,如果是win03内核的问题,我也木有办法了。。╮(╯_╰)╭

这个问题折腾了一整天,最后决定放弃memcache存储,等到换到linux再用mc存储,反正也没什么高负载。但是我们用mc存储其它数据,比如商品啊,分类啊,或者smarty缓存,都很正常,唯独session没法装进去。

讨论这个帖子(1)垃圾回帖将一律封号处理……

Lv3 码奴
sc***31 Linux系统工程师 6年前#1

Memcached在session数超过一定值后不适合用来存储session。

Memcache采用slab内存预分配,固定长度key的数量是有限的,如果数量占满会依据LRU删除key,造成丢失。

 文明上网,理性发言!   😉 阿里云幸运券,戳我领取