CodeIgniter 会话 ID 更改且无法正常工作
Posted
技术标签:
【中文标题】CodeIgniter 会话 ID 更改且无法正常工作【英文标题】:CodeIgniter session id changing and not working 【发布时间】:2013-11-08 16:05:46 【问题描述】:由于我们的支付系统,我们必须使用第三方网站上的某种中继系统,才能拥有有效的 PCI (HTTPS)。
我们目前正面临一个已经使用了太多小时的奇怪错误。
我们的注册有 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
)
但在某种程度上,它仍然有正确的广告客户 ID 和广告客户名称数据,所以这完全是奇怪的。
做什么?
这就像codeigniter在每次页面加载时刷新session_id一样,因此会有问题。
或者可能是因为域 cookie 设置?我不知道,请帮助我们。
【问题讨论】:
如果我理解您在这里所做的事情,我认为与会话相关的安全设置不允许跨站点传输数据。您应该为此使用一些网络服务,例如。安静。 【参考方案1】:根据 CI 的 Session.php,ID 在每次更新时都会更改,但他们保留对旧 ID 的引用,以便他们可以在右侧更新它。
此外,根据文档:“session_id”(默认情况下)每五分钟重新生成一次”。
如果没有特定原因使用“会话 ID”,我建议您在用户数据中设置另一个唯一变量并将其用作“会话 ID”。
$uniqueId = uniqid(time()+$unique_user_variable, TRUE);
$this->session->set_userdata("my_session_id", md5($uniqueId));
因为“唯一用户变量”可能会根据您的具体情况与用户 ip、用户名、用户 id 等有所不同。
【讨论】:
【参考方案2】:在这种奇怪的情况下,我试图捡起别人的碎片。我的开发部署测试会因 ajax 调用的会话不同而失败。
似乎本地虚拟机 IP 不足以匹配这个特定 CodeIgniter 项目的卷积。
只有在我使用正确的域名设置本地 DNS 服务器后,它才允许 logged_in 识别会话 $username/$identity。
我猜想 ajax 是在外部调用域,而我是在本地查看站点,并使用从 VM 提供的 IP。
【讨论】:
【参考方案3】:尝试输入您网站的正确 URL。
$config['base_url'] = 'http://www.yoursite.com';
【讨论】:
【参考方案4】:我遇到了同样的问题(刷新时更改会话 ID),结果发现我没有在我的测试平台/设备上设置正确的日期时间
【讨论】:
【参考方案5】:这叫做会话轮换,它实际上是 CodeIgniter 中的一个安全功能, 我不建议禁用它,而是为您的引用创建一个表,并在每个请求中将单个使用授权令牌附加到另一个域。
然后从您的第二个域交叉引用令牌服务器端。
如果您需要更多详细信息,请告诉我 =]
您可以在此处查看我对同一主题的回答之一:IonAuth - seems to be randomly logging me out
【讨论】:
以上是关于CodeIgniter 会话 ID 更改且无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章
Codeigniter 3 - 从外部 Codeigniter 安装访问会话