因此,当会话超时以在 Codeigniter 中工作时,我无法重定向到登录页面。这可能是我的一个非常基本的错误,但我在控制器中使用的代码是:
if(!$this->session->userdata('is_logged_in')) {
redirect('login/');
}
它可以将用户重定向到登录页面,但会不断循环回到登录页面。为什么是这样?
因此,当会话超时以在 Codeigniter 中工作时,我无法重定向到登录页面。这可能是我的一个非常基本的错误,但我在控制器中使用的代码是:
if(!$this->session->userdata('is_logged_in')) {
redirect('login/');
}
它可以将用户重定向到登录页面,但会不断循环回到登录页面。为什么是这样?
可能是因为调用的会话中没有数据is_logged_in
。如果您查看手册,您将看到存储在会话中的默认数据:
什么是会话数据?
就 CodeIgniter 而言,会话只是一个包含以下信息的数组:
用户唯一的 Session ID(这是一个具有非常强熵的统计随机字符串,使用 MD5 散列以实现可移植性,并且(默认情况下)每五分钟重新生成一次) 用户的 IP 地址 用户的用户代理数据(浏览器的前 120 个字符)数据字符串)“最后一个活动”时间戳。
您需要is_logged_in
在用户登录时设置或使用已经存在的东西,例如session_id
或last_activity
。
您需要检查用户是否不在登录页面上。听起来它在发出请求时正在执行。
这样的事情应该这样做:
if(!$this->session->userdata('is_logged_in') && !strstr(current_url(), 'login/')) {
redirect('login/');
}
也可能是,就像stormdrain 说的,会话数据没有设置。