我有一个网站,用户可以选择网站“记住我”(AKA设置一个cookie),并根据这个网站上的建议,我将数据库中的密码加密切换到php的password_hash()
功能。现在,我不能只是将任何旧的哈希值相互比较,所以我使用php的password_verify()
。密码验证需要明文和密码哈希。
如何将用户密码存储在浏览器cookie中,而不是明文?
答案 0 :(得分:3)
将密码存储在cookie本身是一个非常糟糕的主意,不要这样做。
在很高的水平上,我会:
md5
),该令牌由该用户的几个唯一(但一致)属性组成让我们简要介绍一下。假设$hash
是存储在数据库中的密码哈希,并且您还为此用户提供了$userId
和$username
个变量。
我会生成一个看起来像这样的cookie:
$token = md5($userId . $username . $hash);
$cookie = $userID . "|" . $token; // 1|XXXXXXXX
现在,当用户访问您的网站并检索此Cookie时:
$parts = explode("|",$cookie);
$userId = $parts[0];
$token = $parts[1];
现在您知道用户声称是谁,但您需要验证。
从数据库中获取用户记录,然后重新生成令牌并进行比较。
// Assuming you just ran a SELECT query, and fetched the result into `$row`
$dbToken = md5($row['userId'] . $row['username'] . $row['hash']);
if($token == $dbToken) {
// The user is who he claims to be! Log them in
} else {
// The cookie token didn't match our re-generated token, don't trust this cookie
}
有意义吗?您可能需要根据您的情况稍微修改一下。希望这有助于让你至少朝着一个好的方向前进。