PHP setcookie 函数不保存 cookie?

标签 php cookies authentication

我希望有人可以帮助解决我在处理某些代码时遇到的这个小问题。请记住,这只是一个业余爱好网站,我知道存在安全漏洞。 我编写了一个名为 set_remember_cookies 的函数,当用户选中“记住我”框时,它会从我的登录脚本和注册页面调用。

每个安全页面上的函数然后执行以下操作:

  1. 检查是否设置了内存 cookie
  2. 查询数据库以查找与 cookie 中经过哈希处理的用户名关联的 User_ID
  3. 从用户表中获取该 User_ID 的密码
  4. 从 remember_cookies 表中获取盐
  5. 散列密码 + 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);
          }
      }
    ?>

最佳答案

您的 cookie 在 1971 年的某个时候过期了!看起来你想要一年后的补偿,所以试试

 setcookie("Username", $username_hash, time() + 60*60*24*365);

第三个参数不是从'now'开始的偏移量,它是从Unix epoch开始的偏移量- rather fine manuals一定要说清楚:)

关于PHP setcookie 函数不保存 cookie?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17711754/

相关文章:

Javascript 添加数字,就好像它们是字符串一样

jquery - 为什么我的所有 jQuery cookie 都未定义?

java - 是否有可能制定出仍然使用 web.xm 中的 <security-constraint> 的自定义身份验证和授权机制

javascript - DropzoneJS 作为 PHP 表单的一部分

php - PHP 和 PHP5 文件扩展名之间的区别

javascript - 在 Javascript 中通过 GET 获取 div id

node.js - Passport.use 本地登录访问资源

PHP system() 使用 MySQL 在许多数据库上运行查询

java - 跨域cookie和签名小程序

PHP和mySQL登录安全疑虑