当前位置: 首页 > 面试题库 >

PHP-setcookie(); 不工作

拓拔玺
2023-03-14
问题内容

我进行了登录,设置了一个带有估算电子邮件地址值的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的位置):

<?php 
include "global.php";    
?>
<h2>Login</h2>
<?php 
    echo "We currently have <b>" . $usercount . "</b> members, <b>" . $onlinecount . "</b> of which are online. "; 
?>
<br>
<br>
<?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!";
        }
    }
?>
<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>

问题答案:

您必须先设置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>


 类似资料:
  • 问题内容: 我最近在属性“ Same Site”上阅读了“ RFC 6265”,我看了一些有关2016年4月的文章,Chrome 51和Opera 39已经实现了“ same-site”属性… 我想知道当前的PHP是否支持使用此属性创建cookie? 问题答案: [ 重要更新: 正如@caw在下面指出的那样,此hack 将在PHP 7.3中崩溃。现在就停止使用它,以保护自己免受不愉快的意外!或至少

  • 我正在尝试设置cookie以从AWS Cloudfront查看私有内容 http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-setting-signed-cookie-custom-policy.html 他们给出了一个示例cookie头: 我创建了以下php代码 但曲奇并没有设定好。只

  • 问题内容: 我有一个页面test.php,其中包含以下代码: 我有一个页面,SetCookie.php,其中包含以下代码: 当单击test.php的按钮时,我使用XMLHttpRequest来调用我的SetCookie.php页面。该页面将执行,因为如果我向其添加回显,则会在xmlhttp响应中得到它。但是,TestCookie似乎没有设置。 如果在text.php中,我执行与SetCookie.

  • 问题内容: '; ob_flush(); flush(); 我有专用的服务器,因此可以进行更改。我正在运行apache和nginx作为代理服务器。 问题答案: 您正在使用,而没有,因此没有需要冲洗的东西。 它还取决于Web服务器和代理及其设置。 您应该禁用Nginx的缓冲(添加到配置文件并重新启动Nginx) 另外,检查您的 php.ini是否 包含和。

  • 我从安装了这个版本http://ffmpeg.org/releases/ffmpeg-2.5.3.tar.bz2 还尝试了yum版本,但对于youtube-dl来说还不够新。 我尝试了,PHP/Apache仍然找不到ffmpeg。 Apache用户在CentOS 6.5上运行PHP脚本<打电话给我的youtube dl。以根用户身份从php命令行调用php(使用FFmpeg) 调用my youtu

  • 我已经配置了php.ini和sendmail.iniXAMPP发送电子邮件和它的工作罚款。现在,当我改变PHP中的代码使用SMTP它不工作...它使用相同的主机,相同的smtpSecurity,相同的端口,相同的电子邮件作为XAMPP和它不工作... 和我的php代码 错误:服务器-