Печенье с расширениями - PullRequest
0 голосов
/ 11 ноября 2011

Я видел файлы cookie, установленные веб-страницами с "."характер в них.Я пытаюсь максимально использовать динамическое использование $ _GET ['url'] для установки моих файлов cookie, а затем включить его на следующей странице в качестве условия, где он проверяет, чтобы убедиться, что файл cookie был установлен, прежде чем он позволит пользователям выполнятьдействие.Обычно я использую файлы cookie и IP-адреса в анонимном голосовании, чтобы каждый голосующий получал по одному в день.IP-адреса сбрасываются с помощью задания cron один раз в день, а срок действия файлов cookie истекает через 17 часов.У меня нет проблем с установкой файла cookie с расширением .php, однако после многих часов проб и ошибок я не могу заставить его принять его в if (isset).Что бы я ни пытался, он не распознает, что куки установлены.Без расширения все работает нормально.Я пробовал дюжину конфигураций, но вот в основном то, что я пытаюсь отладить.

<?php

$cookie = "test.php";
setcookie("$cookie", "workdamnyou");

if (isset($_COOKIE[$cookie])) {
echo "is set";
}
else {
echo "not set";
}
?>

Я пробовал isset ($ _ COOKIE ["$ cookie"]) и isset ($ COOKIE['$ cookie']) также.Тем не менее, я действительно хотел бы, чтобы вы могли запускать PHP, не загружая его каждый раз на ваш сервер .. - -

Ответы [ 5 ]

2 голосов
/ 11 ноября 2011

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

Вы МОЖЕТЕ запустить PHP без загрузки на сервер;самый простой вариант - установить стек xAMP (LAMP / MAMP / WAMP в зависимости от того, разрабатываете ли вы Linux / Mac / Windows).

1 голос
/ 11 ноября 2011

Ну, я нашел решение, которое, я думаю ... PHP не любит точки в именах переменных (http://www.php.net/manual/en/language.variables.basics.php). Теперь, так как глобальные регистры могут быть включены, возможно, что $ _COOKIE ["name.ext")] может превратиться в $ name.ext, что будет недопустимым. Таким образом, "Точки и пробелы в именах переменных преобразуются в подчеркивания. Например, становится $ _REQUEST [" a_b "]." (http://www.php.net/manual/en/language.variables.external.php). Проверяет isset ("name_php") работа?

1 голос
/ 11 ноября 2011

Обратите внимание, что файлы cookie становятся доступными только при следующей загрузке страницы (когда они перешли с сервера на клиент и обратно).

Попробуйте установить файл cookie напрямую с помощью $ _COOKIES ["test.php"] = "test«;и посмотрите, что происходит с

var_dump($_COOKIE);

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

setcookie($cookie, "work");

вместо

setcookie("$cookie", "work");

Наконец, вы можете запускать PHP локально с вашим собственным сервером.Самый простой способ в Windows - это стек WAMPP.Я считаю, что это очень легко установить и запустить: http://www.apachefriends.org/en/xampp.html

Удачи!

1 голос
/ 11 ноября 2011

Вы не можете установить и получить доступ к cookie в одном экземпляре! Вам нужно перенаправить , обновить или что-то еще, но вы не можете одновременно установить и получить доступ. Также убедитесь, что ваши другие параметры установлены как имя хоста, время истечения. , e.t.c

Например.

setcookie("TestCookie", $value, time()+3600, "/", "/", 1);

Для отладки просто выполните var_dump($_COOKIE)

0 голосов
/ 11 ноября 2011

Почему у вас есть расширение .php в имени файла cookie?Это должно быть:

$cookie = 'test';

См. http://www.ietf.org/rfc/rfc2109.txt пункт 4.1:

Два заголовка управления состоянием, Set-Cookie и Cookie, имеют общие

синтаксические свойства, включающие пары атрибут-значение.В следующей грамматике для описания их синтаксиса используются токены DIGIT (десятичные цифры) и токен (неофициально, последовательность не специальных, непробельных символов) из спецификации HTTP / 1.1 [RFC 2068].

av-pair = av-pair * (";" av-pair)

av-pair = attr ["=" value];необязательное значение

attr = токен

значение = слово

слово = токен |строка в кавычках

Атрибуты (имена) (attr) не чувствительны к регистру.Пробел
разрешен между токенами.Обратите внимание, что хотя приведенный выше синтаксис
в описании показывает значение как необязательное, большинство атрибутов требуют его.

ПРИМЕЧАНИЕ. Приведенный выше синтаксис разрешает пробел между атрибутом и знаком =.

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