未使用PHP setcookie函数设置的Cookie

时间:2019-04-08 19:11:55

标签: php cookies setcookie

我正在使用setcookie php函数在浏览器中设置一些cookie。 我尝试在PHP代码中设置cookie,然后使用print_r($_COOKIE)检查它。 Cookie不会显示,但是如果我尝试在另一个文件中设置Cookie 将正确显示。

if (isset($_POST['username']) && isset($_POST['password']))
{
    global $username,$password;
    $username = $_POST['username'];
    $password = sha1($_POST['password']);
    setcookie('username', $username, time()+3600); //cookie not set
    setcookie('password', $password, time()+3600); //cookie not set
    $database = connect_to_database($db_path);
    $result = $database->query("SELECT * FROM users WHERE username = '$username' AND password = '$password'");
    while (true)
    {
        $response = $result->fetchArray(SQLITE3_ASSOC);
        if (!$response)
        {
            unset($_COOKIE['username']);
            unset($_COOKIE['password']);
            break;
        }
        if (($response['username'] == $username) && $response['password'] == $password)
        {
            header("location: ../index.php");
        }
    }

}

我希望设置cookie,但是使用print_r($_COOKIE);会返回array()

注释

  • 在我的浏览器设置中允许使用cookie
  • $_POST['username']$_POST['password']通过另一页中的表单发送到此页
  • $_POST['username']$_POST['password']设置为真实值。

2 个答案:

答案 0 :(得分:0)

确保您拥有服务器和客户端都知道的域。 echo $_SERVER['HTTP_HOST']应该告诉您浏览器的域名完全相同。否则,浏览器将不接受Cookie。

确保您的服务器和客户端时间正确无误。浏览器将拒绝日期时间错误的Cookie。

请勿编写任何其他代码,而要做:

<?php
$cookie_name = "user";
$cookie_value = "John Doe";
setcookie($cookie_name, $cookie_value, time() + (86400 * 30), "/"); // 86400 = 1 day 
// expiration
echo date("H:i:s d.m.Y")."<br>";
echo $_SERVER['HTTP_HOST']."<br>";
var_dump($_COOKIE);
?>

并刷新页面两次。

也可以在以下网址查看手册:https://www.php.net/manual/en/features.cookies.php

答案 1 :(得分:-1)

在代码中使用 ob_start() and ob_end_flush()

Check out manual for ob_start() ob_end_flush()

`

ob_start();
setcookie("name", "data");
ob_end_flush();

`