CodeIgniter在数据库中生成多个会话。为什么?

时间:2010-03-13 15:21:04

标签: php browser codeigniter session

我有一个网站在页面加载时执行一些ajax调用。出于某种原因,CodeIgnitor在您加载页面时插入4个会话(我假设每个ajax调用一个)。我正在将会话存储在数据库中。

我很确定每个浏览器应该只有一个会话。 Firefox似乎只产生一个;其他浏览器似乎创建了一大堆会话。同一个用户的多个会话给了我一些严重的身份验证问题。

为什么会这样?我怎么能阻止它?

6 个答案:

答案 0 :(得分:7)

大家好,

我知道讨论发生在前一段时间,但是有人可能会觉得这很有用。 到目前为止,我已经使用了CI会话而没有将其数据存储在数据库中。今天我决定尝试一下并立即遇到同样的问题:CI在每个页面加载时都会产生新的会话。

我检查了我的服务器时间,时区,我的cookie等等 - 我可以在论坛上找到的所有内容 - 没有结果。然后决定自己调试CI Session类。 简而言之,事实证明我的会话表中的 user_agent 字段太小 - VARCHAR 50 - 它会删除原始的user_agent字符串 - 因此CI无法找到我的会话并生成另一个。我只是将user_agent字段大小增加到200,一切都像魅力一样。

我忘了提到我使用Mac OS X Lion。

再次,希望这会对某人有所帮助。

答案 1 :(得分:1)

检查客户端操作系统和服务器上的日期/时间。

我知道为时已晚,但也许有人在寻找答案的同时找到了这个页面......

我认为这是因为CI在包含会话ID的cookie上设置了到期时间,并且如果服务器和客户端之间的时间差高于cookie变旧的过期时间,则服务器将为其生成新会话每个请求的客户端。从来没有花时间弄清楚确切的机制,但发生在我身上好几次,这个解决方案总能奏效。

答案 2 :(得分:1)

我发现此主题存在同样的问题:在每个页面上CI都会生成新会话。可能的解决方案:从网站名称中删除下划线(不是“my_test_site.com”,而是“my-test-site.com”)。至少,这对我的情况有帮助。

答案 3 :(得分:0)

检查您的config.php文件,确保正确填写了Cookie选项。如果它们不能跟踪用户,它将在每个页面加载时生成一个新会话。

答案 4 :(得分:0)

  

检查客户端操作系统和服务器上的日期/时间。

我遇到了同样的情况并确认解决方案为修复

答案 5 :(得分:-1)

$config['cookie_domain'] = "example.com";

在此代码段中使用您的域名。