PHP没有设置无限cookie


php not setting infinite cookie

好的,现在我在登录表单处理程序.php文件中有了以下代码:

<?php
    $username = "root";
    $password = "root";
    $hostname = "localhost";
    $db = "agendadb";
    $db = new mysqli($hostname, $username, $password, $db);
  $res = $db->query("SELECT userId FROM tblUsers WHERE username='".$_POST['username']."' AND password='".md5($_POST['password'])."'");
  if($res){
    if($row =  $res->fetch_assoc()){
      setcookie('userId', strval($row['userId']), 2147483647);
      $_COOKIE['userId']= $row['userId'];
      echo 1;
    }else{
      echo -2;
    }
  }else{
    echo -1;
  }
?>

不知为什么,cookie userId没有被设置,我不知道为什么。脚本正在工作,因为它正确地回显结果,但是没有设置cookie,也没有抛出错误。

在我的索引页的开始,我有以下代码来检查cookie是否已设置

<?php
echo '<script>';
if(!isset($_COOKIE['userId'])){
  echo 'console.log(" isset");';
}
if(empty($_COOKIE['userId'])){
  echo 'console.log(" empty");';
}
if($_COOKIE['userId']==""){
  echo 'console.log(" ==");';
}
echo '</script>';
?>

和登录后我的控制台在index.php总是显示isset empty ==

此外,我尝试在登录处理程序.php文件中使用ob_start();ob_end_flush();,但也不起作用。

以下是你的cookie没有被设置的几个原因。

不能被域

访问

是否被设置在与此脚本相同的目录上(您的两个文件都在完全相同的目录中)?如果没有,那么您需要指定cookie的第四个参数,使其可用于整个域,并固定您的参数。

setcookie('userId', strval($row['userId']), time() + 2147483647, "/");

cookie过期或子域名错误

如果您的网站同时查询wwwnon-www版本,那么您可能会得到不同的cookie,因为它们被视为不同的子域。您可以更改htaccess来解决这个问题,或者您可以通过进入开发控制台并输入document.cookie并比较两个页面

来检查。

直到第二次请求或缓存相关的cookie才发送

cookie也不会在脚本上的第一个请求上设置,因为它们只在请求完成时创建。您应该再次刷新页面以确保没有发生这种情况。您的浏览器也可能正在缓存而没有获得新的cookie,因此在继续解决问题之前,您最好先清除与测试站点相关的所有cookie。

而且,一个"无限"的饼干是不可能的。