我正在 Codeigniter 中构建“记住我”功能,通常我会看到库/项目使用令牌在用户上设置 cookie,该令牌会保存在数据库中,并在用户每次访问网站时进行比较。
在 Codeigniter 中,我们可以设置会话过期时间,这导致我尝试不同的方法,这就是我所做的:
- 我将配置中的session_expiration设置为0(无限会话)
- 如果用户未选中“记住我”,我会在会话中设置 2 小时的时间,并在窗口关闭时销毁会话。
所以我的登录代码如下所示:
if (!$this->input->post('remember_me')) {
$this->session->sess_expiration = 7200;
$this->session->sess_expire_on_close = TRUE;
}
$this->session->set_userdata($session_data);
还有我的配置文件:
$config['sess_expiration'] = 0;
$config['sess_expire_on_close'] = FALSE;
我没有看到人们在项目中使用这个解决方案,我已经对此进行了测试,但它似乎工作得很好。
那么,对于我的问题,您认为这是一种安全的做法吗?我应该了解哪些安全危险?任何关于此解决方案与 cookie+数据库令牌的输入都会很棒。
我发现这个问题最简单的解决方案就是通过这种方式修改 Codeigniter 创建的 cookie:
$this->session->set_userdata('user', $user); // a cookie has been created
if($this->input->post('remember_me'))
{
$this->load->helper('cookie');
$cookie = $this->input->cookie('ci_session'); // we get the cookie
$this->input->set_cookie('ci_session', $cookie, '35580000'); // and add one year to it's expiration
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)