0

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

这可能是罪魁祸首吗?我希望这将是对最初问题的快速而肮脏的解决方案。

4

3 回答 3

3

Are you using Firefox and Firebug with extensions (like FirePHP) installed? Because if you are having such a setup, when you open/close the Firebug console, the user-agent string changes, and your session is no longer recognized by CI.

My workaround was to disable FirePHP. Try checking your user-agent string and see if you have something extra besides the default browser user-agent. You should be able to identify it easily. if there is one.

于 2012-10-05T07:03:11.913 回答
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; }的东西,以防止它再次发生,因为我真的想要闪存消息。

于 2014-03-18T03:48:29.747 回答
0

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

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

于 2012-10-09T15:48:20.113 回答