CodeIgniter会话ID更改但无法正常工作

时间:2013-10-29 13:15:18

标签: php codeigniter session

由于我们的支付系统,我们必须使用第三方网站上的某种中继系统,才能拥有有效的PCI(HTTPS)。

我们目前正面临着一个我们已经使用了太多时间的奇怪错误。

我们注册了4个步骤。

  1. 输入所有数据。
  2. 添加图片
  3. 付款
  4. 我们这样做: 在第1步,我们将所有发布数据保存到会话中      $this->session->set_userdata("campaigncreation", $out); 是的$ out包含所有数据。

    在步骤中,我们可以轻松打印出竞选创建的会话数据; <?print_r($this->session->userdata)?>

    因为我们需要访问另一个网站,我们会在会话中添加session_id,以便将会话保留在第三方网站上。

    我们的网址如下: https://relay.ditonlinebetalingssystem.dk/relay/v2/relay.cgi/http://xxxx.dk/something/controller/a1264526031adb9c71ae433eef44bfa0

    如您所见,我们在URL中使用session_id(<?=$this->session->userdata("session_id")?>),在控制器中,我们将会话ID替换为控制器中的会话ID,如下所示:

    $ phpsess是“a1264526031adb9c71ae433eef44bfa0

    if ( !empty($phpsess)){
                $this->session->set_userdata("session_id",$phpsess);
    }
    

    当我们现在打印出用户数据时,我们得到了正确的session_id,但它并没有从步骤1获取数据。怎么办?

    我只得到

     Array
    (
    [session_id] => a1264526031adb9c71ae433eef44bfa0
    [ip_address] => 87.54.46.121
    [user_agent] => Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.69 Safari/537.36
    [last_activity] => 1383052142
    [user_data] => 
    [advertiser_id] => 1
    [advertiser_name] => xxxx
    

    但在某种程度上,它仍然拥有advertiser_id和advertiser_name的正确数据,所以这完全是错误的。

    做什么?

    这就像codeigniter在每个页面加载时刷新session_id,因此会出现问题。

    或者可能是因为域cookie设置?我不知道,请帮助我们。

5 个答案:

答案 0 :(得分:0)

它被称为会话轮换,它实际上是CodeIgniter中的安全功能, 我不建议禁用它,而是为您的引用创建一个表,并在每个请求中将一个使用授权令牌附加到另一个域。

然后从您的第二个域交叉引用令牌服务器端。

如果您需要更多详情,请告诉我们=]

你可以在这里看到我对同一主题的一个答案:
IonAuth - seems to be randomly logging me out

答案 1 :(得分:0)

我遇到了同样的问题(刷新时更改了会话ID),结果发现我没有在我的测试平台/设备上设置正确的日期时间

答案 2 :(得分:0)

尝试输入您网站的正确网址。

$config['base_url'] = 'http://www.yoursite.com';

答案 3 :(得分:0)

在这种奇怪的情况下,我试图收拾其他作品。我的开发部署测试将失败,会话在ajax调用上会有所不同。

似乎本地虚拟机IP不足以匹配此特定CodeIgniter项目的卷积。

只有在我使用正确的域名设置本地DNS服务器后,才允许logged_in识别会话$ username / $ identity。

我想ajax是从外部调用域名的,而我是在本地查看使用从VM提供的IP的站点。

答案 4 :(得分:0)

根据CI的Session.php,每次更新都会更改ID,但是他们会保留对旧ID的引用,以便他们可以在右侧更新。

另外,根据doc:&#34; session_id&#34;每隔五分钟重新生成(默认情况下)&#34;。

如果没有具体的理由使用&#34;会话ID&#34;我建议你在userdata中设置另一个唯一变量,并将其用作&#34;会话ID&#34;。

$uniqueId = uniqid(time()+$unique_user_variable, TRUE);
$this->session->set_userdata("my_session_id", md5($uniqueId));

作为&#34;唯一用户变量&#34;根据您的具体情况,可能会因用户IP,用户名,用户ID等而异。