1

如何将用户名安全地存储在数据库中,而不直接将它们添加到 cookie 值中?

示例: 我想显示登录用户的用户名。如果他提前关闭了浏览器,唯一的方法是 $_COOKIE['cookie name'] ,其中 cookie 值与数据库中的用户名链接。所以我不需要散列用户名。

这样对吗?如果它是正确的,它是否安全?

4

4 回答 4

3
  1. 您可以将用户名存储在 cookie 中,只要您不在那里保存密码,这是安全的。

  2. 您还可以在那里保存 user id,然后它不会泄露任何身份验证详细信息,同时让您找到正确的用户。

  3. 使用sessions. 存储的数据存储在$_SESSION服务器上而不是客户端上。

于 2012-06-22T08:32:29.030 回答
3

它是安全的。只是不要将密码存储在客户端(浏览器)上。也永远不要将密码发送到浏览器。

于 2012-06-22T08:29:23.373 回答
2

下面假设您正在谈论使用 cookie 的持久登录功能。为了记住用户名(但不自动登录),在 cookie 中包含用户名(可选编码)应该没问题。无论如何,密码永远不应该在 cookie 中。


cookie 不应直接识别,即用户 ID/名称不应出现在 cookie 中。相反,您应该为表中的用户分配足够长的随机数据字符串,并将其存储在 cookie 值中。使用后,您应该更新字符串并发出另一个 cookie。

例如:

john | ewojroj1234ojqewor
jack | ljqwelkn1k31n23k33

第二列将放置在 cookie 中。稍后您将针对用户表查询该值,然后:

  1. 获取用户数据并存储在会话中
  2. 重新生成随机字符串
  3. 发出另一个cookie

密码更改和注销也应导致用户令牌字符串发生更改。

为了进一步阅读,Barry Jaspan 写了一篇关于这种方法的好文章。

于 2012-06-22T08:30:58.303 回答
1

最好的方法是仅将用户表的 user_id(唯一标识主键)存储在 $_COOKIE 或 $_SESSION 变量中 - 可能在 $_COOKIE['user_id'] 中。

然后在每次页面加载时,您可以使用该 ID 从数据库中检索您希望的任何用户信息。例如(请注意,这只是概念/伪代码。您当然会首先清理/清理/验证/绑定 $_COOKIE 或 $_SESSION 数据参数):

SELECT * FROM user_table WHERE user_id = $_COOKIE['user_id']

于 2012-06-22T08:30:48.527 回答