【问题标题】:Why does session_start cause a timeout when one script calls another script using curl当一个脚本使用 curl 调用另一个脚本时,为什么 session_start 会导致超时
【发布时间】:2010-09-20 03:43:54
【问题描述】:

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

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

为什么会这样?

【问题讨论】:

    标签: php post curl timeout


    【解决方案1】:

    来自 php 手册

    http://php.net/manual/en/function.session-write-close.php

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

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

    【讨论】:

      【解决方案2】:

      我不完全明白为什么会发生这种情况,但我已经解决了。

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

      所以,在我执行整个 curl 发布脚本之前,我调用了 session_commit 函数,从而结束调用脚本会话,并启用被调用脚本重新启动会话。

      捶...

      【讨论】:

        【解决方案3】:

        我也被这个咬了。感谢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 = $_SERVER['HTTP_HOST'];
        $uri  = rtrim(dirname($_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($_REQUEST, '', "&"));//append parameters    
        
        curl_exec($ch); // results will be outputted to the browser directly
        curl_close($ch);
        exit();
        

        【讨论】:

          猜你喜欢
          • 2011-10-15
          • 2020-03-22
          • 1970-01-01
          • 2011-06-01
          • 2022-08-02
          • 1970-01-01
          • 2019-01-21
          • 1970-01-01
          • 2013-11-10
          相关资源
          最近更新 更多