当一个脚本使用curl调用另一个脚本时,为什么session_start会导致超时

StackOverflow https://stackoverflow.com/questions/252907

  •  05-07-2019
  •  | 
  •  

我有两个PHP脚本,都通过调用 session_name('MySessID')来使用相同的会话。

当第一个脚本使用curl调用第二个脚本时,第二个脚本在调用 session_start()时挂起。

为什么会发生这种情况?

有帮助吗?

解决方案 2

我不完全理解为什么会这样,但我解决了。

错误描述了我遇到的同样问题。我有一个脚本发布到另一个脚本,都使用相同的会话,这显然会拖延PHP。

因此,在我执行整个curl post脚本之前,我调用 session_commit 函数,因此结束调用脚本会话,并启用被调用脚本以重新启动会话。

...重击

其他提示

来自php手册

http://php.net/manual/en/function。会话写入close.php

会话数据通常在脚本终止后存储,无需调用session_write_close(),,但会话数据被锁定以防止并发写入,只有一个脚本可以随时对会话进行操作。将框架集与会话一起使用时,由于此锁定,您将体验到逐个加载的框架。只要对会话变量进行了所有更改,就可以通过结束会话来减少加载所有帧所需的时间。

所以你不能让2个脚本同时使用同一个会话。

我也被这个咬了。由于stackoverflow中提供的信息,我修复了它。

我有两页,都有“session_start()”和在顶部,第一个用curl调用第二个,所以我可以在验证后将变量POST到第二个脚本。网络服务器一直挂着,直到我添加了“session_write_close()”。

代码示例如下:

// IMPORTANT (OR ELSE INFINITE LOOP) - close current sessions or the next page will wait FOREVER for a write lock.
session_write_close();

// We can't use GET because we can't display the password in the URL.
$host = 

我也被这个咬了。由于stackoverflow中提供的信息,我修复了它。

我有两页,都有“session_start()”和在顶部,第一个用curl调用第二个,所以我可以在验证后将变量POST到第二个脚本。网络服务器一直挂着,直到我添加了“session_write_close()”。

代码示例如下:

<*>SERVER['HTTP_HOST']; $uri = rtrim(dirname(

我也被这个咬了。由于stackoverflow中提供的信息,我修复了它。

我有两页,都有“session_start()”和在顶部,第一个用curl调用第二个,所以我可以在验证后将变量POST到第二个脚本。网络服务器一直挂着,直到我添加了“session_write_close()”。

代码示例如下:

<*>SERVER['PHP_SELF']), '/\\'); $url = "http://$host$uri/formPage2.php?"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL,$url); //append URL curl_setopt($ch, CURLOPT_POST,TRUE);//We are using method POST curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query(

我也被这个咬了。由于stackoverflow中提供的信息,我修复了它。

我有两页,都有“session_start()”和在顶部,第一个用curl调用第二个,所以我可以在验证后将变量POST到第二个脚本。网络服务器一直挂着,直到我添加了“session_write_close()”。

代码示例如下:

<*>REQUEST, '', "&"));//append parameters curl_exec($ch); // results will be outputted to the browser directly curl_close($ch); exit();
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top