Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP和cookies_Php_Html_Cookies - Fatal编程技术网

PHP和cookies

PHP和cookies,php,html,cookies,Php,Html,Cookies,存储用户ID或用户名的最佳方式是什么,这样他们就不必每次登录 如果将存储的ID或用户名与数据库中存储的ID或用户名进行比较,我想将用户转发到members页面 使用cookie是否安全?我如何才能做到这一点?不要将他们的用户名或密码存储在cookie中。始终假设互联网上的每个人都可以看到个人计算机上的每个cookie。您应该做的是将会话id及其访问的IP地址保存到MySQL表中,然后将会话id保存到cookie中。大多数浏览器会在关闭窗口时清除会话变量,但不会清除cookie。因此,您首先检查会

存储用户ID或用户名的最佳方式是什么,这样他们就不必每次登录

如果将存储的ID或用户名与数据库中存储的ID或用户名进行比较,我想将用户转发到members页面


使用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不是。