2011-09-08 79 views

回答

14

读你指的博客文章和阅读SessionNativeSessionStorage类的代码后,我会尝试模仿博客文章mentionned的行为是要做到这一点:

$session = $this->get('session'); 

// Change the session attributes 

$session->save(); 
session_write_close(); 

// Do database calls and other stuff. 

我没有测试它,但它应该按预期工作。解决您的问题的另一种方法是使用与默认使用的NativeSessionStorage不同的会话存储。您可以通过使用PdoSessionStorage对象来使用例如数据库存储。这可以防止PHP使用锁。有关如何为会话使用数据库存储的更多信息,请参阅此cookbook entry

但是,不能保证数据库系统在访问同一行时不会堆叠多个请求,但应该快于NativeSessionStorage

问候,
马特

+0

经过测试,效果很好! – AlterPHP

+0

非常好,谢谢你测试了解决方案:) – Matt

+0

如果你不介意我在这篇博文中引用了你的解决方案:http://blog.alterphp.com/2012/08/how-to-deal-with -asynchronous-request.html。让我知道你是否感到烦恼...... – AlterPHP

1

只是为那些谁正在使用的PHP警告内置的Web服务器(如我被困,它可能会帮助别人):

从PHP文档:

Web服务器只运行一个单线程进程,因此如果请求被阻止,PHP应用程序将停止运行。

这意味着即使您正确关闭会话,您仍然会一次结束一个连接。

http://php.net/manual/en/features.commandline.webserver.php