php setcookie не работает с вызовом ajax
У меня есть страница, test.php, со следующим кодом:
<html>
<body>
<form>
<script type="text/javascript">
function SendCookies(){
if (window.XMLHttpRequest)/* code for IE7+, Firefox, Chrome, Opera, Safari */
{ xmlhttp=new XMLHttpRequest(); }
else /* code for IE6, IE5 */
{ xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); }
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status == 200)
{
alert('done');
}
}
xmlhttp.open("GET", "/web/DEV/Classes/SetCookie.php?time=" + new Date());
xmlhttp.send();
}
</script>
<input type="text" id="txtInput" name="txtInput"/>
<input type="button" id="btnSubmit" name="btnSubmit" value="Submit" onclick="SendCookies()"/>
<div id="divTest">
<?php
if (isset($_COOKIE["TestCookie"])) {
echo $_COOKIE["TestCookie"];
} else {
echo "__Results__";
}
?>
</div>
</form>
</body>
</html>
У меня есть страница, SetCookie.php, со следующим кодом:
<?php
$var = "THIS IS A TEST";
setcookie("TestCookie", $var, time()+60*60*24*30);
?>
Когда test.php нажата кнопка, я использую XMLHttpRequest для вызова моего SetCookie.php страница. Страница выполняется, потому что, если я добавлю к ней эхо, я получу это в ответе xmlhttp. Тем не менее, TestCookie, похоже, не собирается настраиваться.
Если в text.php, я выполняю ту же команду, что и в SetCookie.php, затем файл cookie устанавливается соответствующим образом для все сеансы браузера.
Даже после того, как я закрываю/открываю браузер, файл cookie остается неизменным с момента, когда я однажды установил его в своем test.php страница вручную.
---- РЕДАКТИРОВАТЬ-----
Я добавил:
if(!setcookie("TestCookie", "A", time()+60*60*24*30, "/")) {
echo "FAIL";
}
На самую вершину test.php , однако, когда я перезагружаю страницу, на ней никогда не отображается обновленный файл cookie... потому что этот файл cookie уже был установлен без параметра "/" и не может быть изменен позже с помощью параметра "/".
После очистки кэша и работая с предложенным кодом, я очистил свои файлы cookie из браузера и использовал добавленный параметр для метода set, я смог манипулировать файлами cookie со всех страниц!!! большое вам спасибо!!
2 answers
Если вы не добавляете значение $path
в setcookie()
, по умолчанию используется значение "текущий каталог". Это означает, что если вы установите файл cookie из /web/DEV/Classes/SetCookie.php
, файл cookie будет установлен в /web/DEV/Classes/
, и все, что находится выше этого пути, не увидит этот файл cookie.
Чтобы исправить это, добавьте определенный $путь к setcookie. Если ваше приложение работает в корневом домене(example.com), используйте '/'
. Если он находится во вложенной папке (example.com/myapp /), использовать '/myapp/'
setcookie("TestCookie", $var, time()+60*60*24*30, '/');
Я думаю, вам следует изучить параметр path в setcookie. Установите для него значение "/", чтобы он был доступен из всех каталогов/страниц сайта.