Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

I'm using the setcookie php function to set some cookies in my browser. I try to set cookies in my php code and then I check it using print_r($_COOKIE). Cookies are not displayed, however if I try to set cookie in another file they will be displayed correctly.

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");
        }
    }

}

I expected cookies to be set, but using print_r($_COOKIE); returns me array()

Notes

  • Cookies are allowd in my browser settings
  • $_POST['username'] & $_POST['password'] sent to this page via form in another page
  • $_POST['username'] & $_POST['password'] are set with true value.
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
164 views
Welcome To Ask or Share your Answers For Others

1 Answer

Make sure you have a domain that is known by both server and client. echo $_SERVER['HTTP_HOST'] should tell you the exact same domain that your browser has. If not, cookie will not be accepted by the browser.

Make sure your server and client time is perfectly correct. Browser will reject a cookie with a wrong datetime.

Do not write any other code and just do:

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

and refresh the page twice.

Also check out manual at: https://www.php.net/manual/en/features.cookies.php


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share

548k questions

547k answers

4 comments

86.3k users

...