我偶尔检测到PHP会话有一个奇怪的问题。
当我使用相同的会话ID运行两个PHP脚本时,第二个脚本被卡住,直到第一个脚本完成。
我猜这是因为试图打开同一个会话存储文件两次。但也有可能我是错的。
在正常站点工作中,您永远不会发现这种效果,因为用户通常不会同时打开两个或更多页面。
但是,如果您尝试使用file_get_contents()获取同一站点的页面内容,则会遇到此问题。
此外,我通过上下文复制cookie,因此file_get_contents()尝试重新打开与调用脚本中已打开的会话相同的会话。
因此,我使用了长时间运行的脚本(大约5-10分钟),这也使我无法使用相同的sessionid / login打开同一站点的任何新页面。
我怎样才能解决这个问题?你有没有看到过任何漂亮的解决方案?
发布于 2013-04-13 08:08:39
是的,这被称为“会话锁定”,在PHP中是正常的。
一种解决方案是不使用会话,只需为所需的持久信息设置cookie。
另一种解决方案是实现您自己的会话处理程序:
http://php.net/manual/en/session.customhandler.php
此处提供了有关自定义MySQL会话处理程序的详细演练:
http://phpmaster.com/writing-custom-session-handlers/
发布于 2013-04-13 11:16:14
对于这个问题,我也找到了非常简单的解决方案。我们可以使用session_write_close();解锁脚本1中的会话文件,然后我们可以毫无顾虑地创建任何file_get_contents()、curl_exec()等,并在这些操作之后通过session_start()将会话返回。我自己检查,就像我的魅力!
https://stackoverflow.com/questions/15982654
复制相似问题