PHP-setcookie();不起作用
我做了一个登录,它用输入的电子邮件地址的值设置了一个cookie,所以在global.php文件中,它存储了一个用户数据数组,使用:PHP-setcookie();不起作用,php,cookies,Php,Cookies,我做了一个登录,它用输入的电子邮件地址的值设置了一个cookie,所以在global.php文件中,它存储了一个用户数据数组,使用: $email = $_COOKIE["PeopleHub"]; $getuserdata = mysqli_query($con, "SELECT * FROM Earth WHERE email='$email'"); $userdata = mysqli_fetch_array($getuserdata, MYSQLI_ASSOC); 未设置cookie,我
$email = $_COOKIE["PeopleHub"];
$getuserdata = mysqli_query($con, "SELECT * FROM Earth WHERE email='$email'");
$userdata = mysqli_fetch_array($getuserdata, MYSQLI_ASSOC);
未设置cookie,我知道这一点,因为我制作了一个测试文件:
echo $_COOKIE["PeopleHub"];
它只是一页空白
登录代码(其中设置了cookie):
登录
在发送任何标题之前,必须设置cookies
发件人:
setcookie()定义一个要与其余HTTP头一起发送的cookie。与其他头一样,cookie必须在脚本输出之前发送(这是协议限制)。这要求您在任何输出(包括和标记以及任何空格)之前对该函数进行调用
这意味着,如果您希望按原样使用此代码,则需要查看
<?php
ob_start();
echo "Hello\n";
setcookie("cookiename", "cookiedata");
ob_end_flush();
?>
我只是想指出,我对setcookie不起作用有一个问题。当我进一步研究该文件时,它被编码为UTF-8和BOM。当我将其重新编码为UTF-8而不使用BOM setcookie时,效果很好,因此BOM是在遇到第一个php标记之前编写的。我想在我的php.ini文件中启用缓冲可能也会解决这个问题
有人可能最终会发现这些信息很有用。我在使用setcookie函数更新cookie时遇到了另一个问题
所以我使用php序列化函数设置了从数组生成的cookie字符串。从现在起,无论是设置序列化字符串还是任何其他简单字符串,我都无法更新cookie-setcookie函数根本不起作用
然后我用新的cookie键设置了另一个cookie,这次数据是用json_encode函数编码的。这次我能够设置cookie并对其进行更新:-)我也遇到了同样的问题,结果证明这是因为我传递给函数的域有一个自定义端口(这是不允许的)。单击我给您的输出缓冲链接。有一个实际使用setcookie()的示例。如果我将ob_start()放在;在全局文件的顶部?是的。只需确保在每个文件的末尾也调用ob_end_flush()。在包含setcookie()的全局核心函数文件中定义一个自定义函数,如函数cookie_set(),并在html代码顶部使用该函数。如果要删除cookie,只需对unset($_cookie['cookiename'])和setcookie使用相同的方法即可('cookiename',NULL,time()-3600,“/”)这就是使用记事本++!:)谢谢罗伯特!但是Notepad++默认为不带BOM的UTF-8。。。你在说什么,克里斯蒂安?我想是Visual Studio Express在我的案例中添加了BOM。是的,Notepad++通常默认为不带BOM的UTF-8。但是,如果您或您的同事使用了其他工具,很容易得到一个看起来不错的文件,但是PHP会发送BOM并破坏cookie。例如,我在一个异构环境中工作,一些IDE默认为带BOM的UTF-8。考虑准备好的陈述或PDO。
<?php
ob_start();
echo "Hello\n";
setcookie("cookiename", "cookiedata");
ob_end_flush();
?>
<?php
include "global.php";
if(isset($_POST["email"])){
$email = $_POST["email"];
$password = sha1($_POST["password"]);
$check = mysqli_query($con, "SELECT * FROM Earth WHERE `email`='$email' AND `password`='$password'");
$check = mysqli_num_rows($check);
if($check == 1){
setcookie("PeopleHub", $email, 0, '/');
echo "We logged you in!";
}
else {
echo "We couldn't log you in!";
}
}
?>
<h2>Login</h2>
<?php
echo "We currently have <b>" . $usercount . "</b> members, <b>" . $onlinecount . "</b> of which are online. ";
?>
<br>
<br>
<form action="<?php echo $_SERVER['REQUEST_URI']; ?>" method="post">
Email <input name="email" placeholder="Email Address" required="" type="text"><br>
Password <input name="password" placeholder="Password" required="" type="password"><br>
<input type="reset" value="Start Over">
<input type="submit" value="Login">
</form>