我希望有人可以帮助解决我正在处理的一些代码的这个小问题。请记住,这只是一个爱好网站,我知道存在安全漏洞。我编写了一个名为 set_remember_cookies 的函数,当用户选中“记住我”框时,它会从我的登录脚本和注册页面中调用。
每个安全页面上的一个函数然后执行以下操作:
- 检查是否设置了记住 cookie
- 查询数据库以查找与 cookie 中的哈希用户名关联的 User_ID
- 从用户表中获取该 User_ID 的密码
- 从 remember_cookies 表中获取盐
- 对密码 + salt 进行哈希处理,并将其与 cookie 中的哈希密码进行匹配
同样,我知道将散列密码存储在 cookie 中也是不安全的,但我现在并不担心。
我的问题是我在下面包含的 set_remember_cookies 函数实际上并没有设置 cookie。在受保护的页面上,第一步(检查 cookie 是否存在)失败。我还在浏览器中检查了 cookie,它们没有被存储。
谁能向我解释为什么这个功能没有设置cookies?我找不到任何错误,但希望有人可以!谢谢!
<?php
function set_remember_cookies($uid, $identifier, $password) {
mysql_query("DELETE FROM remember_cookies WHERE User_ID = '$uid'"); //Delete old cookie records
$salt = sha1(uniqid(time() . $_SERVER['HTTP_REFERER']));
$username_hash = hash("sha256", $identifier . $salt); //Hash the username
if (mysql_query("INSERT INTO remember_cookies (User_ID, Username_Hash, Salt) VALUES ('$uid', '$username_hash', '$salt')")) {
setcookie("Username", $username_hash, 60*60*24*365);
setcookie("Password", hash("sha512", $password . $salt), 60*60*24*365);
}
}
?>