PHP - setcookie(); 不工作

 前所未闻啊_549 发布于 2023-02-13 15:33

我已经进行了登录,设置了一个带有估算的电子邮件地址值的cookie,所以在global.php文件中,它使用以下方法存储用户数据的数组:

$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的地方):


Login

" . $usercount . " members, " . $onlinecount . " of which are online. "; ?>

Email
Password

John Conde.. 40

您必须发送任何标头之前设置Cookie .

从手册:

setcookie()定义了一个与其他HTTP头一起发送的cookie.与其他标头一样,必须在脚本的任何输出之前发送cookie(这是协议限制).这要求您在任何输出之前调用此函数,包括和标记以及任何空格.

这意味着如果您希望按原样使用此代码,则需要查看输出缓冲.


根据内容global.php,这可能对您有用.我所做的就是在setcookie()调用之前删除任何输出.如果global.php其中包含任何空格或HTML输出,则无效:


Login

" . $usercount . " members, " . $onlinecount . " of which are online. "; ?>

Email
Password


Robert.. 8

只是想指出,我遇到了setcookie无法正常工作的问题.当我进一步调查文件时,它被编码为带有BOM的UTF-8.当我将其重新编码为没有BOM的UTF-8时,setcookie工作正常,因此BOM在我遇到第一个php标签之前就被编写了.我想在我的php.ini文件中启用缓冲可能也会解决这个问题.

有人可能最终发现此信息有用.

2 个回答
  • 只是想指出,我遇到了setcookie无法正常工作的问题.当我进一步调查文件时,它被编码为带有BOM的UTF-8.当我将其重新编码为没有BOM的UTF-8时,setcookie工作正常,因此BOM在我遇到第一个php标签之前就被编写了.我想在我的php.ini文件中启用缓冲可能也会解决这个问题.

    有人可能最终发现此信息有用.

    2023-02-13 15:35 回答
  • 您必须发送任何标头之前设置Cookie .

    从手册:

    setcookie()定义了一个与其他HTTP头一起发送的cookie.与其他标头一样,必须在脚本的任何输出之前发送cookie(这是协议限制).这要求您在任何输出之前调用此函数,包括和标记以及任何空格.

    这意味着如果您希望按原样使用此代码,则需要查看输出缓冲.

    <?php
    
    ob_start();
    echo "Hello\n";
    
    setcookie("cookiename", "cookiedata");
    
    ob_end_flush();
    
    ?>
    

    根据内容global.php,这可能对您有用.我所做的就是在setcookie()调用之前删除任何输出.如果global.php其中包含任何空格或HTML输出,则无效:

    <?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>
    

    2023-02-13 15:36 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有