在阅读this以及所有相关问题后,我仍然遇到问题
我正在尝试使用“记住我”功能实现登录表单。早些时候我一直在使用一个cookie(其中只包含一个哈希的用户名,没有密码)来验证用户是否已经登录,但我已经读过这不太安全所以我决定只坚持使用会话。
一开始,一切都按需要运作:
$expires=isset($_POST['rememberMe'])? time()+(60*60*24*14): 0;
session_set_cookie_params($expires, "/", ".example.com", false, true);
session_start();
但我希望他们能够直接打开页面(例如http://example.com/blog),如果设置了“记住我”。显然,如果用户没有登录,我会进行session_start()
并重定向到登录页面。但是,此时我无法正确执行session_set_cookie_params()
,因为我不知道他是否/她早些时候设置了“记住我”。如果我仍然将它放入cookie中,它会安全吗?或者我应该修改我的数据库来执行此操作?
还有一件事:两周内保持会话数据(没有密码,再次!)(例如用户名,权限等)是否安全?
答案 0 :(得分:1)
如果您在数据库中正确存储了随机生成的密钥,我就看不出它是如何安全的。
您应该生成一个随机密钥,将其存储在您的数据库中,然后使用它注册一个cookie。当用户请求时,他会向您发送该cookie,这将验证数据库中的密钥,并提供访问权限,如果它没有问题。
请记住,会话的基本机制实际上使用cookie。您的会话cookie也存在窃取“记住我”cookie的危险,所以如果您认为“记住我”方案不安全,那么您的整个会话系统都存在缺陷。