‘记住我’登录CodeIgniter
-
05-07-2019 - |
题
如何在CodeIgniter中实现它?
解决方案
(这个回答是对原始问题的回答)
你会怎么做?或者,怎么会 你创建一个更长的会话 到期日超过其他人?
所有创建的会话都将使用 相同的$ config ['sess_expiration']在 配置文件(默认值:7200秒), 有没有办法传递自定义值 ?
延长会话cookie的到期时间不适用于“记住我”。功能,因为用户在关闭浏览器时将丢失会话cookie。如果Code Igniter没有原生的“记住功能”,那么你需要写一些东西来删除一个长寿命的cookie,其中包含允许在服务器再次看到它时自动登录的信息。
关于持久登录Cookie最佳实践的文章很好总结为:
- 当用户成功登录并选中记住我时,登录 cookie除了发布之外 标准会话管理cookie. 2
- 登录cookie包含用户的用户名和随机数 (来自此处的“令牌”)来自a 适当的大空间。用户名和 令牌在a中存储为一对 数据库表。
- 当未登录的用户访问该网站并提供登录Cookie时, 查找用户名和令牌 在数据库中。 1.如果该对存在,则认为用户已通过身份验证。 已使用的令牌已从中删除 数据库。生成一个新令牌, 使用用户名存储在数据库中, 并通过新登录发给用户 曲奇饼。 2.如果该对不存在,则忽略登录cookie。
- 仅通过此机制进行身份验证的用户是 不允许访问某些 受保护的信息或功能 比如更改密码,查看 个人识别信息,或 花钱。执行那些 操作,用户必须先 成功提交正常 用户名/密码登录表单。
- 由于这种方法允许用户记住多个 来自不同浏览器的登录或 计算机,提供了一种机制 用户擦除所有记住的 登录一次操作。
醇>
另一篇文章在改进的持久登录Cookie最佳实践中为这些想法构建了更多安全性
如果你遵循这些文章中的做法,你就不会出错!
其他提示
您可能需要重新考虑“改进的持久登录Cookie最佳实践”中的建议。我在网站上发布了对问题的分析,但其主旨是:
如果没有安全线,您无法阻止Cookie窃取,无论
(*'安全线',我的意思是SSL / VPN隧道/公钥加密 - 或强大的挑战 - 响应方案*)
我完全支持持久登录最佳做法,但有一点是没有任何技巧可以提供帮助,唯一的方式是SSL。
感谢您的解决方案。 我已将此实现到我的CI项目中。
DEV注意:cookie应该有一个secure-hash作为remember-me键。 - 不要只存储用户ID) - 不要存储密码, - 并且不存储密码的哈希值。 这样人们就无法自动登录任何帐户。
最糟糕的情况:一旦黑客发现哈希方法,您就可以在一个地方调整密钥生成器功能,然后再次使用安全性进行设置。我只想调整盐和胡椒串。
希望有所帮助。 Chris D. - 来自澳大利亚:)
对于这些事情,所有类中的CI变量都可以通过自己的库访问:
例如:
$this->session->sess_expiration = 500000;
希望能解决您的问题。
github上有图书馆,记得我下载它。
使用此库的setCookie()函数,会发生以下情况:
1.生成包含唯一编号的cookie 这个数字记录在一个名为ci_cookies的数据库表中,同时传递给setCookie()的netid / username
2.当调用verifyCookie()函数时,浏览器的cookie散列必须与记录到数据库的散列匹配。如果是,则verifyCookie()在主页
上返回true你需要在加载会话之前设置conf
$do_not_remember = (boolean) $this->input->post('do_not_remember');
if ($do_not_remember) {
$this->config->set_item('sess_expiration', 0);
$this->config->set_item('sess_expire_on_close', true);
}
$this->load->library('session');