Это на странице с названием 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
…??
Суперглобальная переменная $ _COOKIE содержит только значения cookie. Если вы измените это значение, это не повлияет на cookie, потому что для этого вам нужно отправить заголовки в браузер.
Если вам нужно изменить его, вы должны использовать метод SetCookie потому что это отправит заголовки с новым значением.
Заметка Помните, что $ _COOKIE будет обновляться только после использования SetCookie когда вы обновите страницу.
Так что это должно работать:
Файл: 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
Отвечая на мой собственный вопрос. Оказалось, было 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'