【问题标题】:CodeIgniter destroying my session withoutCodeIgniter 破坏了我的会话
【发布时间】:2012-10-04 20:34:29
【问题描述】:

因此,我当前的任务涉及一个网站,人们可以在该网站上登录并查看有关特定主题的一系列培训视频。我在 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> 

这可能是罪魁祸首吗?我希望这能快速解决最初的问题。

【问题讨论】:

    标签: javascript codeigniter session reset


    【解决方案1】:

    您是否使用安装了扩展(如 FirePHP)的 Firefox 和 Firebug?因为如果您有这样的设置,当您打开/关闭 Firebug 控制台时,用户代理字符串会更改,并且您的会话不再被 CI 识别。

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

    【讨论】:

    • 有趣。我在我的 Firefox 上禁用了 Firebug,它似乎让会话保持了一夜,这是一件很棒的事情!现在,我的问题是:由于我无法预测人们在他们的计算机上使用的浏览器和扩展程序,是否有可以在服务器级别实施的修复程序?这个问题影响了很多人,他们中的许多人(我觉得他们中的大多数人)不了解他们正在使用的浏览器,或者他们加载的扩展。他们是油漆承包商,而不是像我们这样的开发商。
    • 你搞错了 :) CI 只会在 IP 和/或用户代理将 从一个请求更改为另一个请求 时使会话无效(在同一会议)。 CI 没有“有效用户代理”列表或类似的东西。所以你的用户是安全的。我可以根据经验告诉你,我曾经使用过基于 CI 会话的身份验证系统,这种设置给我带来了问题(与你的原因相同——我当时并不知道),但令我惊讶的是,客户从未提到他有随机/间歇性注销问题。这是一个要求很高的客户。
    【解决方案2】:

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

    我知道问题涉及 CodeIgniter 处理会话...我该如何放置... 后台运行的东西。最初我在 iFrame 中使用 CI 页面。那些返回系统的“ping”是导致锁定的原因。所以,我现在在 iFrame 中使用一个常规的、扁平的 PHP 页面。它连接到数据库,但不通过 CI 来完成。我在有问题的桌子上得到了我的“ping”,但我没有中断会话。

    【讨论】:

      【解决方案3】:

      我在 CodeIgniter 中“随机”销毁会话数据时遇到了同样的问题,我花了很多时间找出问题所在。现在我想我发现了我的问题,似乎$this-&gt;session-&gt;set_flashdata 是罪魁祸首。

      我注意到我在使用此功能的页面上登出。我还注意到,如果你这样做:

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

      稍后在同一页面上再次具有相同的变量:

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

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

      【讨论】:

        猜你喜欢
        • 2019-02-23
        • 2015-07-02
        • 2013-10-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-20
        • 1970-01-01
        相关资源
        最近更新 更多