我遇到会话到期刷新问题。
我这样做:
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;)
也许有人遇到过类似的问题?
答案 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);
}
会话到期根本未执行:
$config['sess_expiration'] = 60;
$config['sess_time_to_update'] = 59;
会话在60秒后过期。会话到期时间未更新:
$config['sess_expiration'] = 60;
$config['sess_time_to_update'] = 5;
$config['sess_time_to_update'] = ?
答案 4 :(得分:0)
我遇到了同样的问题,在经历了一些令人沮丧的时间后,我发现我的索引页面上有一个空白区域。删除了空间并解决了问题。