PHP和cookies
存储用户ID或用户名的最佳方式是什么,这样他们就不必每次登录 如果将存储的ID或用户名与数据库中存储的ID或用户名进行比较,我想将用户转发到members页面PHP和cookies,php,html,cookies,Php,Html,Cookies,存储用户ID或用户名的最佳方式是什么,这样他们就不必每次登录 如果将存储的ID或用户名与数据库中存储的ID或用户名进行比较,我想将用户转发到members页面 使用cookie是否安全?我如何才能做到这一点?不要将他们的用户名或密码存储在cookie中。始终假设互联网上的每个人都可以看到个人计算机上的每个cookie。您应该做的是将会话id及其访问的IP地址保存到MySQL表中,然后将会话id保存到cookie中。大多数浏览器会在关闭窗口时清除会话变量,但不会清除cookie。因此,您首先检查会
使用cookie是否安全?我如何才能做到这一点?不要将他们的用户名或密码存储在cookie中。始终假设互联网上的每个人都可以看到个人计算机上的每个cookie。您应该做的是将会话id及其访问的IP地址保存到MySQL表中,然后将会话id保存到cookie中。大多数浏览器会在关闭窗口时清除会话变量,但不会清除cookie。因此,您首先检查会话(他们当前是否已登录),如果他们未登录,则检查cookie(以前是否已登录,更重要的是,是否来自此IP地址?)
当然,如果他们有会话id,但IP地址不正确,请让他们登录。他们可能只是有一个具有动态IP的ISP,或者他们可能一直在监听网络流量,并且他们试图在没有密码的情况下进入管理员用户。此功能应该是可选的,以允许人们从网吧等处登录,而不是让他们的数据对所有人开放 对。cookie是标记浏览器的唯一可能方式。
你必须在那里存储一些唯一的和不可预测的值。从用户数据中生成一些散列,将其与其他用户数据一起存储在数据库中,并将其设置为cookie。对于我的站点,我使用自定义编写的会话类。这将在cookie中存储sess_id和sess_哈希,这对于当前用户是唯一的。数据库中还存储了一个IP地址,并根据当前IP进行检查,以验证它是否是同一台计算机,但这不是主要的身份验证机制。然后将数据存储、序列化并在数据库中进行base64'd。我建议不要使用PHP会话,因为任何具有ID的用户都可以访问这些会话。例如,有人发布指向包含PHPSESSID的内容的链接,可以让他们登录到自己的帐户。最安全的方法是要求从浏览器获得有效的SSL证书,并在服务器端验证用户代理证书。然而,在我见过的任何浏览器中,安装这样的证书对用户来说都是一个巨大的痛苦和障碍,它可能不适合公共网站。不过,有时可以在内部网中看到它。我只是为其他感兴趣的人编写了这个解决方案
这就是会话的目的,请参阅更多@Hannes不,会话不适用于此。如果他们不必登录,则没有任何方法可以调用“安全”…PHP会话以默认情况下不在链接中传递ID。你的建议是基于无知。你必须更好地学习这个话题。而且,事实上,您的方法更容易受到会话固定的影响,因为PHP会话有时会在URL中传递ID,因此似乎永远保持相同的ID。我从来没有弄明白为什么它只是偶尔这样做。我怀疑这与浏览器中的cookie支持有关。每个登录和每个会话的ID顺序都是唯一的。散列是一个UUID。因此,除了暴力攻击和/或侧通道攻击(例如UUID不是随机的)之外,它不易受到任何攻击。您怀疑它错了。它与PHP设置有关。可以在您想要的任何状态下设置。由于嗅探/xss,您的ID仍然可以捕获。该ID可能可以捕获,UUID也可以捕获。但是如果没有这两个详细信息,您将无法访问会话。此外,IP必须匹配。ID是连续的,但UUID不是。