0

我运行以下测试以验证我的代码是否正常工作:

curl -L -i -X POST -d 'json={"orderBy":0,"maxResults":50}' http://mysite.com/ctlClient/

我打电话给: http: //mysite.com/ctlClient/index.php

        session_unset();
        session_start();

        //pass data to _SESSION
        foreach($_POST as $key => $value){
           $_SESSION[$key] = $value;
         }
        // redirect to `/fwf/online/index.php`
        ctlGotoSameDomain("/fwf/online/");

重定向后,我调用/fwf/online/index.php

 <?php

session_start();

 ....

class fwfOnline {


  public function __construct() {

         msqLogFile('test/test_max',$_SESSION);

        // here is my problem, $_SESSION is empty, :(

        $this->json = isset($_SESSION['json']) ? $_SESSION['json'] : null;
        global $gConfig;
        if ($gConfig['soapDebug'])
            msqLogFile("fwf/post", Array('post' => 'Request: '.$this->json));
        $this->response = $this->getResponse();
        echo $this->response;
    }

....

在我的日志中,mysite.com/ctlClient/index.php我看到 $_SESSION 有数据但/fwf/online/index.php它是空的。

有人能告诉我我错过了什么吗?

谢谢,

[编辑] 来自@rr-

我打印了两个会话 ID 并得到了区别:

"2013-07-05 09:44:31","Session ID: ihpfs1skrp792gncgancb02516"
"2013-07-05 09:44:31","Session ID: tp6ejtl1tj9bigrgsi3jt6h9a1"

为什么会发生?

[使固定]

关于@rr-回答我发现了问题,

我需要添加-b到我的脚本以启用 cookie。CURL 默认不使用它们,这个问题导致会话 ID 问题。

谢谢rr-

4

1 回答 1

1

确保您已在目标页面中启动会话:/fwf/online/index.php.

您还可以检查session_id()两个页面上的返回值。该值应该是相同的,如果即使您session_start在两个页面上都调用了它也不是,这可能意味着三件事:

  1. 要么你调用session_write_close这有效地导致创建新会话并忘记所有以前的数据,
  2. PHP 无法访问它应该在服务器上存储会话数据的目录(它发生了!),
  3. ...或用户禁用了 cookie,从而使他的浏览器无法保留会话 ID。

我认为第三种选择很可能是问题的原因。

于 2013-07-05T06:37:10.633 回答