Обновление куки с PHP - PullRequest
1 голос
/ 12 августа 2011

Я пишу простой скрипт для сохранения языкового куки.

Когда пользователь выбирает язык, я бы хотел, чтобы cookie соответствующим образом обновлялся.

По какой-то причине это не работает - после создания файла cookie он не обновляется.

Вот код:

<?php
if($_REQUEST['language']) {
$language = $_REQUEST['language'];
setcookie('language', '', time()-3600);
setcookie('language', $language, time()+3600);
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Cookie language</title>
</head>
<body>
<?php
echo $_COOKIE['language'];
?>
<ul>
<li><a href="delete.php?language=en">en</a></li>
<li><a href="delete.php?language=de">de</a></li>
<li><a href="delete.php?language=es">es</a></li>
</ul>
</body>
</html>

Любая помощь высоко ценится!

Спасибо.

Ответы [ 4 ]

2 голосов
/ 12 августа 2011

Почему вы звоните setcookie() дважды?Вам не нужно удалять cookie и устанавливать его снова.Именно эта строка выполнит работу:

setcookie( 'language', $language, time()+3600 );

Она обновит значение и время файла cookie.

1 голос
/ 12 августа 2011

Согласно определению $_REQUEST в ассоциативном массиве, который по умолчанию содержит содержимое $_GET, $_POST и $_COOKIE.

Другими словами, ваш $_GET['language'] перезаписывается на $_COOKIE['language'], в результате чего $_REQUEST['language'] равно $_COOKIE['language'].

Если вы замените $_REQUEST на $_GET в своем коде, этобудет работать так, как вы ожидаете:

<?php
if (isset($_GET['language'])) {
    $language = $_GET['language'];
    setcookie('language', $language, time()+3600);
    // setcookie() doesn't update $_COOKIE
    $_COOKIE['language'] = $language;
}
?>
<title>Cookie language</title>
<?php echo $_COOKIE['language']; ?>
<ul>
<li><a href="delete.php?language=en">en</a></li>
<li><a href="delete.php?language=de">de</a></li>
<li><a href="delete.php?language=es">es</a></li>
</ul>
1 голос
/ 12 августа 2011

Я думаю, ваш код работает нормально, но массив $ _COOKIE не обновляется до следующего запроса:)

if($_REQUEST['language']) {
$language = $_REQUEST['language'];
setcookie('language', '', time()-3600);
setcookie('language', $language, time()+3600);
$_COOKIE['language'] = $language;
}
0 голосов
/ 12 августа 2011

Есть одна вещь, которая определенно не может работать: вы звоните $_COOKIE сразу после setcookie(). Посмотрите php документацию . Там написано:

Как только куки установлены, к ним можно получить доступ на следующей странице. загрузить с $ _COOKIE

Таким образом, у вас будет доступ к cookie только при следующем запросе. Используйте

echo $language;

вместо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...