2014-01-10 71 views
2

我有一个标准的HTML页面,有几个img标签,每个这些都指向我们的服务器上的PHP文件。当php文件被加载时,它会在生成图像之前将一些数据保存到会话中。PHP会话锁定和使用Memcache存储会话

这个来自每个脚本的会话中的数据然后在我们的应用程序的其他脚本中使用。

生成图像的php文件以session_start开始,并且在使用本机PHP会话处理程序时似乎都很好。每个执行都正确完成,可以检索完整的会话数据。

如果我启用memcache来保存会话,则会出现问题。看起来,每个PHP脚本都是同时执行的,因此当保存到会话中时,只有最后执行的才会真正存储任何数据。

经过进一步调查,Memcache中我发现,最新的稳定版本不支持会话锁定,只有在3.0.4?他们介绍的这款 - http://pecl.php.net/package/memcache/3.0.4

是可以安全使用3.0.4当它是唯一在测试?

2.2.7有什么替代方法或解决此问题的方法吗?

如果您想查看代码的示例,请让我知道。

谢谢。

回答

0

php的-memcached的扩展支持会话锁定

http://us3.php.net/memcached

http://us1.php.net/manual/en/memcached.sessions.php

的内存缓存和memcached的扩展语法上看起来相似,所以可能不会太多头疼的给它一试。 (memcached有一个稳定版本2.1.0 2012-08-07发布)。


如果您在使用设置的memcache 2.2.7你将极有可能通过一些设置来实现自己锁在会话“session_is_locked”变量,然后松开/它解封当脚本完成写入会议。然后,在继续写入会话的任何脚本之前,您总是需要检查该变量是否已设置。

+0

php.ini memcached设置(包括sess.locking)在这里 - > http://www.php.net/manual/en/memcached.configuration.php。我没有说明测试版本是否“安全”,因为我没有足够的经验使用memcache扩展来为您提供适当的答案。尽管id假设检查pecl页面上的包错误可能有助于您的决定。 – KorreyD

+0

Memcached似乎已经做到了这一点,似乎现在正在按预期工作,并没有太多的麻烦来改变。谢谢! –