我有一个标准的html页面,里面有几个img标签,每个标签都指向我们服务器上的php文件。加载php文件后,会在生成图像之前将一些数据保存到会话中。
然后在我们的应用程序中进一步使用来自每个脚本的会话中的这些数据。
用于生成图像的php文件以session_start开头,当使用本机PHP会话处理程序时,所有内容似乎都很好用。每次执行都正确完成,可以检索完整的会话数据。
如果我启用memcache来保存会话,那么问题就会开始发生。似乎每个PHP脚本都是同时执行的,因此当保存到会话时,只有最后一个执行实际存储任何数据。
在对Memcache进行进一步调查后,我发现最新的稳定版本不支持会话锁定,只有在3.0.4中它们会引入这个 - http://pecl.php.net/package/memcache/3.0.4
仅在beta版中使用3.0.4是否安全?
在2.2.7中是否有任何替代或解决此问题的方法?
如果您想查看代码示例,请与我们联系。
感谢。
答案 0 :(得分:0)
php-memcached扩展支持会话锁定
http://us1.php.net/manual/en/memcached.sessions.php
memcache和memcached扩展看起来语法相似,所以尝试一下也不会太令人头疼。 (memcached在2012-08-07发布了稳定版本2.1.0)。
如果你开始使用memcache 2.2.7,你很可能必须通过在会话中设置一些“session_is_locked”变量来自己实现锁定,然后在脚本完成写入会话时释放/取消设置。然后,在继续使用写入会话的任何脚本之前,您始终需要检查是否已设置该变量。