codeigniter会话到期刷新

时间:2012-08-21 13:20:15

标签: php ajax codeigniter session-timeout

我遇到会话到期刷新问题。

我这样做:

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:$ config ['sess_expiration'] = 60;)

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

5 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

对于CodeIgniter的最新版本(包括当前位于“开发”分支中的内容),您无法在session->set_userdata之后调用session->sess_destroy,如另一个答案所述。这是因为sess_destroy()清除了内部userdata数组,包括set_userdata间接要求的当前session_id(set_userdata调用sess_write直接需要当前session_id)。

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

答案 2 :(得分:0)

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

删除$this->session->sess_destroy()。此函数应该是最后一个调用的函数,甚至闪存变量也将不再可用。如果您只想要销毁某些商品,请使用unset_userdata()

答案 3 :(得分: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'] = ?
    

答案 4 :(得分:0)

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