Возможный дубликат:
Cookie отображается только при обновлении?
Я пытаюсь установить базовый PHP-файл cookie, который будет помнить, какая цветовая тема используется. Однако, когда я проверяю это, между настройкой и отображением цветовой темы происходит однократное обновление.
Чтобы уточнить: у меня есть специальная форма, которая позволит пользователям выбирать цвета. Затем появляется кнопка Apply. После того, как эта кнопка применяется, страница должна автоматически установить cookie и показать цвет. Однако, когда нажата кнопка Apply, устанавливается только cookie, и тема не отображается, пока пользователь не нажмет кнопку обновления. Любые идеи о том, как это решить?
$help = $_POST["theme"]; $color = "#" . $help; setcookie("TestCookie", $color, time()+60*60*24); $recolor = $_COOKIE["TestCookie"]; echo '<style type="text/css"> body { background: '.$recolor.' } </style>';
где $ _POST ["theme"] – имя выбранной формы. Большое спасибо! это: Cookie отображается только при обновлении? это то, о чем я говорю, но с PHP, а не с C #
Редактировать: Спасибо за все ответы! Мне удалось обойти это, установив цвет фона на то, что выбрал пользователь, одновременно устанавливая файл cookie. Поэтому, когда пользователь изначально выбирает цвет, это не файл cookie, задающий фон. Это еще одна функция. Он чувствует себя немного дешевым, но он работает!
Суперглобальный $ _COOKIE имеет файлы cookie, доступные в то время, когда вы запрашивали эту страницу, поэтому вы никогда не увидите ценности, которые вы только что сохранили
На странице man здесь http://php.net/set_cookie вы можете увидеть:
После того, как файлы cookie установлены, к ним можно получить доступ при загрузке следующей страницы массивами $ _COOKIE или $ HTTP_COOKIE_VARS.
Это потому, что setcookie не изменяет переменную $ _COOKIE. Вы должны использовать setcookie
и в то же время установить соответствующее значение в $ _COOKIE
Я ожидаю, что это потому, что вы настраиваете cookie, а затем проверяете значение на следующей строке кода – вы еще не сможете его увидеть, потому что в этот момент клиент отправит запрос на страницу , который пока не будет содержать файл cookie.
Вместо этого вы можете попробовать использовать $_SESSION
– просто поменяйте свои ссылки на $_COOKIE
на $ _SESSION.
В противном случае попробуйте явно проверить, была ли только что отправлена форма, и установить стиль на основе только что представленных значений.
Добавляя к sulotion ShogunArts.de, когда вы setcookie()
, эта «команда» должна быть отправлена в браузер сначала через HTTP-заголовки. То же самое применяется при попытке доступа к супер-глобальному $_COOKIE
он не будет содержать значение cookie, если оно не будет возвращено браузером также через HTTP-заголовки.
Вот что происходит:
setcookie()
. $_COOKIE
и теперь вы можете получить к нему доступ со своим скриптом. Спросите, установлен ли файл cookie:
if(isset($_COOKIE["TestCookie"])) $recolor = $_COOKIE["TestCookie"]; else $recolor = $color;