php没有设置无限的cookie

时间:2015-09-06 17:16:17

标签: php cookies

好的,现在我的登录表单处理程序.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 ==

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

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:1)

以下是您使用Cookie但未进行设置的几个原因。

域无法访问

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

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

过时的cookie或错误的子域

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

在第二次请求或与缓存相关的

之前,不会发送Cookie

在脚本的第一个请求中也没有设置Cookie,因为它们仅在请求完成后才创建。您应该再次刷新页面以确保没有发生。您的浏览器也可能是缓存而没有获取新的cookie,在您继续解决问题之前,最好先清除与您的测试站点相关的所有Cookie。

而且,&#34;无限&#34; cookie是不可能的。