制作登录脚本,我现在有以下cookie:
这是在每个页面上,但在浏览器关闭时到期。
session_name('Test_Login');
session_set_cookie_params(0, '/', '.test.com', false, false);
session_start();
如果成功登录,则存储用户名。返回网站时,它将在登录表单中填写用户名。
setcookie('Test_User', $_POST['username'], time()+365*24*60*60, '/', '.test.com', false, false);
这会记住登录表单上“记住我”选项的值 - 是真还是假。
setcookie('Test_Remember', $_POST['rememberMe'], time()+365*24*60*60, '/', '.test.com', false, false);
如果他们选择了上面的“记住我”选项,则会存储用户纯文本密码,即使在一天内浏览器关闭后,也会让他们在访问网站时自动登录。如果存在此cookie和用户cookie,则检查是否有效并再次创建用户会话变量。
setcookie('Test_Pass', $_POST['password'], time()+24*60*60, '/', '.test.com', false, false);
要考虑的其他事项是,如果您注销会话,则传递cookie将被销毁。
我的问题:我md5并将用户密码加密以存储在数据库中。我实际上从来不知道用户通过了。问题在于记忆选项我将他们的密码存储在cookie中的普通视图中。将通行证存储在cookie中的最佳方法是什么?它可以这种方式使用?这样做的标准是什么?基本上我只想让它与Facebook或任何其他登录系统一样。如果你告诉它记住你的话 - 那么他们如何存储信息以便重新登录,而不用cookie中的纯文本呢?
最佳做法是为此设置一个单独的cookie(4)吗?会话cookie是有道理的,但是在我结束时没有更优化的方法来组合其他三个吗?
答案 0 :(得分:2)
您不应该将密码存储在cookie中,这不是一个好习惯,并且可能导致安全问题(有人可能会“窃取”cookie并获取用户密码)。
相反,一旦用户正确地进行了一次身份验证,就可以将sessionId保存在cookie中,并在下次访问时将sessionId传递给能够检索会话的服务器。对于其他安全性,还要存储IP地址,并在重新打开会话时检查它是否相同。例如,您也可以在2周后使服务器会话过期。
要执行此操作,您需要使用cookie,而不是会话cookie(在浏览器关闭后会删除)。
检查session_set_cookie_params()
并提供会话cookie一生。
有关详细信息,请参阅PHP手册:http://www.php.net/manual/en/session.configuration.php#ini.session.cookie-lifetime
最后,如果你真的想要更多的安全性,你一定要看看SSL。
答案 1 :(得分:1)
您应该使用会话变量,而不是将数据存储在cookie中。
这是PHP中的一个例子
<?php
session_start();
$_SESSION['password'] = 'YOUR PASSWORD HERE';
//then you can reference the session variable in your code
echo $_SESSION['password'];
?>
您可以设置会话将保留多长时间,并且用户无法直接访问会话变量,因为它们存储在服务器上。这是许多安全登录系统的工作方式。
答案 2 :(得分:1)
多个消息来源指出http://jaspan.com/improved_persistent_login_cookie_best_practice是我的最佳做法。