好的,现在我的登录表单处理程序.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
,但也无效。
任何帮助都将不胜感激。
答案 0 :(得分:1)
以下是您使用Cookie但未进行设置的几个原因。
它是否与此脚本设置在同一目录中(这两个文件都在完全相同的目录中)?如果没有,那么您需要指定cookie
的第四个参数,以使其可用于整个域,以及修复参数。
setcookie('userId', strval($row['userId']), time() + 2147483647, "/");
如果您的网站同时查询www
和non-www
版本,那么您可能会获得不同的Cookie,因为它们被视为不同的子域。您可以更改htaccess
来解决此问题,也可以进入开发控制台并输入document.cookie
并比较两个页面进行检查
在脚本的第一个请求中也没有设置Cookie,因为它们仅在请求完成后才创建。您应该再次刷新页面以确保没有发生。您的浏览器也可能是缓存而没有获取新的cookie,在您继续解决问题之前,最好先清除与您的测试站点相关的所有Cookie。
而且,&#34;无限&#34; cookie是不可能的。