如何在CodeIgniter中实现它?

有帮助吗?

解决方案

(这个回答是对原始问题的回答)

  

你会怎么做?或者,怎么会   你创建一个更长的会话   到期日超过其他人?

     

所有创建的会话都将使用   相同的$ config ['sess_expiration']在   配置文件(默认值:7200秒),   有没有办法传递自定义值   ?

延长会话cookie的到期时间不适用于“记住我”。功能,因为用户在关闭浏览器时将丢失会话cookie。如果Code Igniter没有原生的“记住功能”,那么你需要写一些东西来删除一个长寿命的cookie,其中包含允许在服务器再次看到它时自动登录的信息。

关于持久登录Cookie最佳实践的文章很好总结为:

  
      
  1. 当用户成功登录并选中记住我时,登录   cookie除了发布之外   标准会话管理cookie. 2
  2.   
  3. 登录cookie包含用户的用户名和随机数   (来自此处的“令牌”)来自a   适当的大空间。用户名和   令牌在a中存储为一对   数据库表。
  4.   
  5. 当未登录的用户访问该网站并提供登录Cookie时,   查找用户名和令牌   在数据库中。        1.如果该对存在,则认为用户已通过身份验证。   已使用的令牌已从中删除   数据库。生成一个新令牌,   使用用户名存储在数据库中,   并通过新登录发给用户   曲奇饼。        2.如果该对不存在,则忽略登录cookie。
  6.   
  7. 仅通过此机制进行身份验证的用户是   不允许访问某些   受保护的信息或功能   比如更改密码,查看   个人识别信息,或   花钱。执行那些   操作,用户必须先   成功提交正常   用户名/密码登录表单。
  8.   
  9. 由于这种方法允许用户记住多个   来自不同浏览器的登录或   计算机,提供了一种机制   用户擦除所有记住的   登录一次操作。
  10.   

另一篇文章在改进的持久登录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');
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top