由于我们的支付系统,我们必须使用第三方网站上的某种中继系统,才能拥有有效的PCI(HTTPS)。
我们目前正面临着一个我们已经使用了太多时间的奇怪错误。
我们注册了4个步骤。
我们这样做:
在第1步,我们将所有发布数据保存到会话中
$this->session->set_userdata("campaigncreation", $out);
是的$ out包含所有数据。
在步骤中,我们可以轻松打印出竞选创建的会话数据;
<?print_r($this->session->userdata)?>
因为我们需要访问另一个网站,我们会在会话中添加session_id,以便将会话保留在第三方网站上。
如您所见,我们在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设置?我不知道,请帮助我们。
答案 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等而异。