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 更改且无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

PHP Codeigniter 无法正常工作

Codeigniter 3 - 从外部 Codeigniter 安装访问会话

在 codeigniter 中集成正常的 php 会话

codeigniter 中的会话令牌更改

Codeigniter 3 会话不适用于 PHP 7.1.4

codeigniter:像子句一样的活动记录不起作用