我有一个页面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页面中设置它。
---- ----- EDIT
我补充说:
if(!setcookie("TestCookie", "A", time()+60*60*24*30, "/")) {
echo "FAIL";
}
到test.php的最顶层,但是当我重新加载页面时,它从不显示更新的cookie ... 因为该cookie已经设置了没有“/”参数,并且以后无法修改,使用“/”参数。
清除缓存并使用建议的代码后,我从浏览器清除了我的cookie并使用添加的参数设置方法,我能够操纵所有页面的cookie!非常感谢你!
答案 0 :(得分:32)
如果您未向$path
添加setcookie()
值,则默认为“当前目录”。这意味着,如果您从/web/DEV/Classes/SetCookie.php
设置Cookie,则Cookie会设置为/web/DEV/Classes/
,并且该路径上方的任何内容都不会看到该Cookie。
要解决此问题,请为setcookie添加特定的$路径。如果您的应用在域根(example.com)上运行,请使用'/'
。如果它位于子文件夹(example.com/myapp/)中,请使用'/myapp/'
setcookie("TestCookie", $var, time()+60*60*24*30, '/');
答案 1 :(得分:4)
我认为你应该研究一下setcookie的path参数。将其设置为“/”,以便可以从站点的所有目录/页面访问它。