PHP setcookie不工作与ajax调用


php setcookie not working with ajax call

我有一个页面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页面。页面执行,因为如果我向它添加一个echo,我将在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(),则默认为"当前目录"。这意味着如果您从/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, '/');

我认为你应该看看setcookie的path参数。将其设置为"/",这样可以从站点的所有目录/页面访问。