如何将用户名安全地存储在数据库中,而不直接将它们添加到 cookie 值中?
示例: 我想显示登录用户的用户名。如果他提前关闭了浏览器,唯一的方法是 $_COOKIE['cookie name'] ,其中 cookie 值与数据库中的用户名链接。所以我不需要散列用户名。
这样对吗?如果它是正确的,它是否安全?
您可以将用户名存储在 cookie 中,只要您不在那里保存密码,这是安全的。
您还可以在那里保存 user id,然后它不会泄露任何身份验证详细信息,同时让您找到正确的用户。
使用sessions
. 存储的数据存储在$_SESSION
服务器上,而不是客户端上。
它是安全的。只是不要将密码存储在客户端(浏览器)上。也永远不要将密码发送到浏览器。
下面假设您正在谈论使用 cookie 的持久登录功能。为了记住用户名(但不自动登录),在 cookie 中包含用户名(可选编码)应该没问题。无论如何,密码永远不应该在 cookie 中。
cookie 不应直接识别,即用户 ID/名称不应出现在 cookie 中。相反,您应该为表中的用户分配足够长的随机数据字符串,并将其存储在 cookie 值中。使用后,您应该更新字符串并发出另一个 cookie。
例如:
john | ewojroj1234ojqewor
jack | ljqwelkn1k31n23k33
第二列将放置在 cookie 中。稍后您将针对用户表查询该值,然后:
密码更改和注销也应导致用户令牌字符串发生更改。
为了进一步阅读,Barry Jaspan 写了一篇关于这种方法的好文章。
最好的方法是仅将用户表的 user_id(唯一标识主键)存储在 $_COOKIE 或 $_SESSION 变量中 - 可能在 $_COOKIE['user_id'] 中。
然后在每次页面加载时,您可以使用该 ID 从数据库中检索您希望的任何用户信息。例如(请注意,这只是概念/伪代码。您当然会首先清理/清理/验证/绑定 $_COOKIE 或 $_SESSION 数据参数):
SELECT * FROM user_table WHERE user_id = $_COOKIE['user_id']