在两个PHP脚本中同时使用相同的会话ID

时间:2013-04-12 23:58:40

标签: php apache file session session-cookies

我偶尔发现PHP会话存在一个奇怪的问题 当我使用SAME会话ID运行两个PHP脚本时,第二个脚本将被卡住,直到第一个脚本完成为止 我想这是因为尝试两次打开同一个会话存储文件。但可能我不对。
您将永远不会在正常的站点工作中捕获此效果,因为用户通常不会同时打开两个或更多页面 但是,如果您尝试使用file_get_contents()获取同一网站的网页内容,则会遇到此问题 另外,我已经通过上下文复制我的cookie,因此file_get_contents()尝试重新打开调用脚本中已经打开的相同会话。
结果,我已经停止了长时间运行的脚本(大约5-10分钟),这也禁止我使用相同的sessionid / login打开同一站点的任何新页面。
我该如何解决这个问题?你有没有看到任何漂亮的解决方案?

2 个答案:

答案 0 :(得分:4)

是的,这称为“会话锁定”,在PHP中是正常的。

一个解决方案不是不使用会话,只需为所需的持久性信息设置cookie。

另一个解决方案是实现自己的会话处理程序:

http://php.net/manual/en/session.customhandler.php

有关自定义MySQL会话处理程序的详细演练如下:

http://phpmaster.com/writing-custom-session-handlers/

答案 1 :(得分:3)

我也找到了解决这个问题的简单方法。我们可以使用session_write_close();来解锁脚本1中的会话文件,然后我们可以毫无顾虑地制作任何file_get_contents()curl_exec()等,并且在这些操作之后将会话转回session_start()。自己检查,作为魅力!