У меня есть страница, 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 со всех страниц !!! Спасибо большое!!
Если вы не добавляете значение $path
в setcookie()
, по умолчанию оно соответствует «текущему каталогу». Это означает, что если вы установите cookie из /web/DEV/Classes/SetCookie.php
, cookie будет установлен в /web/DEV/Classes/
, и что-либо выше этого пути не увидит этот файл cookie.
Чтобы исправить это, добавьте определенный $ path to setcookie. Если ваше приложение работает на корне домена (example.com), используйте '/'
. Если он находится в подпапке (example.com/myapp/), используйте '/myapp/'
setcookie("TestCookie", $var, time()+60*60*24*30, '/');
Я думаю, вы должны изучить параметр пути setcookie. Установите его в «/», чтобы он был доступен из всех каталогов / страниц сайта.