好的,现在我在登录表单处理程序.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过期或子域名错误
如果您的网站同时查询www
和non-www
版本,那么您可能会得到不同的cookie,因为它们被视为不同的子域。您可以更改htaccess
来解决这个问题,或者您可以通过进入开发控制台并输入document.cookie
并比较两个页面
直到第二次请求或缓存相关的cookie才发送
cookie也不会在脚本上的第一个请求上设置,因为它们只在请求完成时创建。您应该再次刷新页面以确保没有发生这种情况。您的浏览器也可能正在缓存而没有获得新的cookie,因此在继续解决问题之前,您最好先清除与测试站点相关的所有cookie。
而且,一个"无限"的饼干是不可能的。