Почему переменная PHP Cookie не сохраняется после закрытия Chrome - PullRequest
0 голосов
/ 07 июня 2018

Я учусь использовать куки в PHP.Я ожидал, что каждый раз, когда я устанавливаю cookie, cookie и все его переменные сохраняются на клиентском сайте, чтобы я мог использовать их снова в следующий раз, когда пользователь посетит сайт.В любом случае, в следующем примере (веб-приложение с параметром входа, я использую куки для хранения уникальной строки, чтобы я мог реализовать опцию «Запомнить меня»), я могу получить доступ к идентификатору сохраненного куки, но данные переменных кажутся потерянными.Вот пример кода, который я использую, и скриншоты того, что я получаю.

Настройка Cookie

 if (isset($_POST['remember_me'])) {
    $token=uniqid($_SESSION['id']);
    $sql="UPDATE users SET token='$token' WHERE id='".$_SESSION['id']."'";
    $conn->query($sql);   
    setcookie("remember_me", $token, time()+30*24*60*60*1000);
}
else{
    setcookie("remember_me","",time()-1000);
} 

Страница пользователя

На странице пользователя он просто печатаетиз массива $ _COOKIE и $ _SESSION.

<?php 
    echo "SESSION: ";
    print_r($_SESSION);
?>
<br>
<?php
    echo "COOKIE: ";
    print_r($_COOKIE);
?>

Процесс:

Что я понял не так и почемумассив cookie после повторного открытия пуст?

РЕДАКТИРОВАТЬ:

Во второй раз я открываю браузерскрипт для установки куки не выполняется.Я просто установил URL, чтобы перейти к user-page.php.
Пример: /localhost/MIAFormApp/script/db/HTML_PROBA/user-page.html.php

1 Ответ

0 голосов
/ 08 июня 2018

Попробуйте удалить оператор else в вашем примере кода - это означает:

Это

if (isset($_POST['remember_me'])) {
    $token=uniqid($_SESSION['id']);
    $sql="UPDATE users SET token='$token' WHERE id='".$_SESSION['id']."'";
    $conn->query($sql);   
    setcookie("remember_me", $token, time()+30*24*60*60*1000);
}
else{
    setcookie("remember_me","",time()-1000);
} 

К этому

if (isset($_POST['remember_me'])) {
    $token=uniqid($_SESSION['id']);
    $sql="UPDATE users SET token='$token' WHERE id='".$_SESSION['id']."'";
    $conn->query($sql);   
    setcookie("remember_me", $token, time()+30*24*60*60*1000);
}

Когда вы снова откроете свой браузер, оператор if будет проверять, была ли найдена переменная POST запомнить_me .Единственный раз, когда он будет найден, это когда кто-то входит в систему, потому что форма входа отправляет эту информацию в форму отправки.В любом другом случае (например, при повторном открытии браузера) будет выполняться оператор else, а это не то, что вам нужно.Причина в том, что установка пустого значения в cookie будет удалять указанный cookie.

...