Файлы cookie не установлены с помощью функции PHP setcookie - PullRequest
0 голосов
/ 08 апреля 2019

Я использую функцию setcookie php для установки некоторых файлов cookie в моем браузере. Я пытаюсь установить куки в своем php-коде, а затем проверяю его, используя print_r($_COOKIE). Cookies не отображаются, однако, если я пытаюсь установить 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");
        }
    }

}

Я ожидал, что куки будут установлены, но использование print_r($_COOKIE); возвращает меня array()

Примечания

  • Файлы cookie разрешены в настройках моего браузера
  • $_POST['username'] & $_POST['password'] отправлено на эту страницу через форму на другой странице
  • $_POST['username'] & $_POST['password'] установлены с истинным значением.

1 Ответ

0 голосов
/ 08 апреля 2019

Убедитесь, что у вас есть домен, который известен как серверу, так и клиенту. 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

...