-1

制作登录脚本,我现在有以下 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,它会检查是否有效并再次创建用户会话变量。

setcookie('Test_Pass', $_POST['password'], time()+24*60*60, '/', '.test.com', false, false);

其他要考虑的事情是如果您注销会话传递 cookie 是否被破坏。

我的问题:我 md5 和盐存储在数据库中的用户密码。我实际上从来不知道用户通过。问题在于记住选项,我将他们的密码以普通视图存储在 cookie 中。将通行证存储在 cookie 中并且可以以这种方式使用的最佳方式是什么?这样做的标准是什么?基本上我只是希望它与 Facebook 或任何其他登录系统一样。如果您告诉它记住您,它会记住您 - 那么他们如何存储信息以重新登录,而不是在 cookie 中以纯文本形式这样做呢?

最好为此设置一个单独的 cookie (4) 吗?会话 cookie 是有道理的,但是在我这端就没有更优化的方式来组合其他三个吗?

4

3 回答 3

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。

于 2013-09-06T05:44:56.040 回答
1

您应该使用会话变量而不是将数据存储在 cookie 中。

这是 PHP 中的一个示例

<?php

session_start();
$_SESSION['password'] = 'YOUR PASSWORD HERE';

//then you can reference the session variable in your code
echo $_SESSION['password'];

?>

您可以设置会话将保留多长时间,并且用户无法直接访问会话变量,因为它们存储在服务器上。这是许多安全登录系统的工作方式。

于 2013-09-06T05:42:10.967 回答
1

多个消息来源指出http://jaspan.com/improved_persistent_login_cookie_best_practice是我的最佳实践。

于 2013-09-06T21:40:26.867 回答