Значение файла cookie PHP не передается с одной страницы на другую

Это на странице с названием headersessioncookie.php

<?php
session_start();
if ( ! isset (  $_SESSION['loggedin'] ) ) {
$_SESSION['loggedin'] = FALSE;
}

$expiry = time()+60*60*9000;
setcookie('cookie[loggedin]', '', $expiry, "", "", "", TRUE);

if ( ! isset (  $_COOKIE['cookie[loggedin]'] ) ) {
$_COOKIE['cookie[loggedin]'] = FALSE;
}

?>

Это на странице под названием test.php

<?php
require_once('headersessioncookie.php'); //start session and cookie

$_SESSION['loggedin'] = TRUE;
$_COOKIE['cookie[loggedin]'] = TRUE;

?>

Когда я запускаю test.php, а затем запускаю эту страницу ниже под названием test1.php …

<?php
require_once('headersessioncookie.php'); //start session and cookie

echo "sessionvalue" . $_SESSION['loggedin'] . '<br>';
echo "cookievalue" . $_COOKIE['cookie[loggedin]'] . '<br>';

?>

… я получил

sessionvalue1
cookievalue

Почему бы мне не получить …

sessionvalue1
cookievalue1

…??

0

Решение

Суперглобальная переменная $ _COOKIE содержит только значения cookie. Если вы измените это значение, это не повлияет на cookie, потому что для этого вам нужно отправить заголовки в браузер.

Если вам нужно изменить его, вы должны использовать метод SetCookie потому что это отправит заголовки с новым значением.

Заметка Помните, что $ _COOKIE будет обновляться только после использования SetCookie когда вы обновите страницу.

1

Другие решения

Так что это должно работать:

Файл: headersessioncookie.php

<?php

//Session
session_start();

if ( !isset($_SESSION['loggedin']) )
$_SESSION['loggedin'] = FALSE;

//Cookie
$expiry = time()+60*60*9000;

if ( !isset($_COOKIE['cookieloggedin']) )
setcookie('cookieloggedin', '', $expiry, "", "", true);

?>

Файл: test.php

<?php
require_once('headersessioncookie.php'); //start session and cookie

$_SESSION['loggedin'] = TRUE;
setcookie('cookieloggedin', '1', $expiry, "", "", true);

?>

Файл: test1.php

<?php
require_once('headersessioncookie.php'); //start session and cookie

echo "sessionvalue" . $_SESSION['loggedin'] . '<br>';
echo "cookievalue" . $_COOKIE['cookieloggedin'] . '<br>';

?>

Пожалуйста, обратите внимание также:

-Как обновить cookie: https://stackoverflow.com/a/6487597/3933332

-Является ли файл cookie чувствительным к регистру: https://stackoverflow.com/a/11312272/3933332

1

Отвечая на мой собственный вопрос. Оказалось, было 3 основных проблемы с моим кодом.

1) Я пытался установить значение cookie, выполнив это:

$_COOKIE['cookie[loggedin]'] = FALSE;

Оказывается, нужно использовать setcookie() установить значение cookie. Назначение нового значения $_COOKIE изменит значение этой переменной (в пределах одной и той же страницы), но не изменит значение внутри куки (вне области этой страницы, вызывая $_COOKIE даст значение, сохраненное в куки).

2) следующее неверно

echo "cookievalue" . $_COOKIE['cookie[loggedin]'] . '<br>';

Вместо этого должно быть

echo "cookievalue" . $_COOKIE['cookie']['loggedin'] . '<br>';

3) Cookie обязательно должен быть передан строковое значение. Я пытался передать значение = FALSE который не является строкой. Вместо этого я мог бы правильно передать значение = 'FALSE'

0
По вопросам рекламы [email protected]