1

我有会话过期刷新的问题。

我这样做:

trought -> $.ajax ({url: "/index.php/main/refresh_session"});

发挥作用:

function refresh_session() {
   $this->session->sess_destroy();

   $data = array('is_logged_in' => true);
   $this->session->set_userdata($data);
}

我的目的是刷新会话超时,但此代码不起作用,会话在 60 秒后过期。(配置:$config['sess_expiration']= 60;)

也许有人遇到过类似的问题?

4

5 回答 5

2

如果您坚持调用,$this->session->sess_destroy();那么您还必须$this->session->sess_create();在尝试再次设置会话数据之前调用,否则将无法设置。

编辑:这是如果您使用数据库来存储会话。否则,您可以重新创建会话而无需手动调用sess_create()

于 2012-08-21T14:10:48.853 回答
1

对于 CodeIgniter 的最新版本,包括当前在“开发”分支中的内容,您不能在另一个答案已经提到的session->set_userdata之后调用。session->sess_destroy这是因为sess_destroy()清除了内部 userdata 数组,包括由(直接需要 current的set_userdataset_userdata 调用)间接需要的当前 session_id 。sess_writesession_id

如果您启用了警告,您应该会看到此要求。

于 2012-08-21T17:26:34.103 回答
0

设置$config['sess_time_to_update']低于$config['sess_expiration']

并删除$this->session->sess_destroy(). 这个函数应该是最后一个调用的,甚至 flash 变量也将不再可用。如果您只想销毁某些项目而不是全部,请使用unset_userdata().

于 2012-08-21T13:30:05.793 回答
0
trought -> $.ajax ({url: "/index.php/main/refresh_session"});

function refresh_session() {
   $data = array('is_logged_in' => true);
   $this->session->set_userdata($data);
}
  1. 会话过期根本没有执行:

    $config['sess_expiration'] = 60;
    $config['sess_time_to_update'] = 59;
    
  2. 会话在 60 秒后过期。会话到期时间未更新:

    $config['sess_expiration'] = 60;
    $config['sess_time_to_update'] = 5;
    $config['sess_time_to_update'] = ?
    
于 2012-08-23T09:04:24.160 回答
0

我遇到了同样的问题,在经历了令人沮丧的几个小时后,我发现我的索引页面上有一个空白区域。删除了空间并解决了。

于 2017-05-11T11:10:58.137 回答