重定向后我的$ _SESSION是空的,为什么?

时间:2013-07-05 06:29:44

标签: php redirect

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

  

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"

为什么会发生?

[FIX]

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

我需要在我的脚本中添加-b以启用Cookie。 CURL默认情况下不使用它们,并且此问题导致会话ID问题。

谢谢rr-

1 个答案:

答案 0 :(得分:1)

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

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

  1. 要么致电session_write_close,这会有效地导致创建新会话并忘记以前的所有数据,
  2. PHP无法访问应该在服务器上存储会话数据的目录(它发生!),
  3. ...或者用户已禁用Cookie,从而使其浏览器无法保留会话ID。
  4. 我认为第三种选择很可能是问题的原因。