CodeIgniter没有破坏我的会话

时间:2012-10-04 20:34:30

标签: javascript codeigniter session reset

因此,我当前的任务涉及一个人们可以登录的网站,并查看有关特定主题的一系列培训视频。我在CodeIgniter中开发了这个。唯一的麻烦是,一旦我让他们登录,并且我创建一个会话,该会话似乎在几分钟后神秘地消失,并且他们被神秘地弹回到登录页面(如果有人在在没有登录的情况下培训视频页面。这是我的config.php页面中的代码块:

$config['sess_cookie_name'] = 'cc_session';
$config['sess_expiration']  = 0;
$config['sess_expire_on_close'] = FALSE;
$config['sess_encrypt_cookie']  = FALSE;
$config['sess_use_database']    = TRUE;
$config['sess_table_name']  = 'cc_sessions';
$config['sess_match_ip']    = TRUE;
$config['sess_match_useragent'] = TRUE;
$config['sess_time_to_update']  = 3000000;

为什么sess_time_to_update设置得如此之高?起初,我认为这是罪魁祸首,在5分钟后更新会话。我已经将会话设置为记录到数据库,以及所有好东西。请问我问题,并帮助我深究这个问题!

我应该指出,我在课程页面上有一个iFrame,以这种方式将“ping”发送回服务器......

 <iframe id="timerAddEnd" style="display:none;" src="http://www.example.com/course/finish/<?=$course->intKey?>/ping" >
 </iframe>
 <script type="text/javascript">
      var auto_refresh = setInterval( function () 
      { 
           var iframe = document.getElementById('timerAddEnd'); 
           iframe.src = iframe.src; 
      }, 60000); 
      // refresh every minute 
 </script> 

这可能是罪魁祸首吗?我希望这会对最初的问题进行快速而肮脏的修复。

3 个答案:

答案 0 :(得分:3)

您是否使用安装了扩展程序(如FirePHP)的Firefox和Firebug?因为如果您正在进行此类设置,则在打开/关闭Firebug控制台时,用户代理字符串会更改,并且CI不再识别您的会话。

我的解决方法是禁用FirePHP。尝试检查您的用户代理字符串,看看除了默认浏览器用户代理之外您是否还有其他内容。您应该能够轻松识别它。如果有的话。

答案 1 :(得分:0)

嗯,这可能不是一个完整的“回答”本身,但我确实提出了各种解决方法。

我知道问题涉及CodeIgniter处理会话...如何把它... 在后台运行的东西。最初我在iFrame中使用了CI页面。回到系统的那些“ping”是造成停工的原因。所以,我现在在iFrame中使用常规的平面ol'PHP页面。它连接到数据库,但不通过CI来执行此操作。我把我的“ping”放到了有问题的桌子上,但我没有打破会议。

答案 2 :(得分:0)

我遇到了同样的问题,会话数据在CodeIgniter中被“随机”破坏,我花了很多时间找出错误。现在我觉得我发现了我的问题,似乎$this->session->set_flashdata是罪魁祸首。

我注意到我在使用它的页面上登出了。我也注意到,如果你这样做:

$this->session->set_flashdata('thisItem', 'value');

以后在同一页面上再次使用相同的变量:

$this->session->set_flashdata('thisItem', 'new value');

然后每次都会破坏会话数据。现在我从我的网站上删除了所有的set_flashdata,我还没有登出...希望这是我的问题。当我有时间的时候,我会尝试将我的闪存系统重写为类似if (!isset('thisItem)) { set it; }之类的东西,以防止它再次发生,因为我真的想要闪存消息。