3

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

4

2 回答 2

4

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

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

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

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

有关自定义 MySQL 会话处理程序的详细演练在这里:

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

于 2013-04-13T00:08:38.730 回答
3

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

于 2013-04-13T03:16:14.303 回答