php setcookie没有使用ajax调用

ada*_*dam 11 javascript php cookies ajax xmlhttprequest

我有一个页面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>
Run Code Online (Sandbox Code Playgroud)

我有一个页面,SetCookie.php,具有以下代码:

<?php 
    $var = "THIS IS  A  TEST";
    setcookie("TestCookie", $var, time()+60*60*24*30);
?>
Run Code Online (Sandbox Code Playgroud)

当单击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";
}
Run Code Online (Sandbox Code Playgroud)

到test.php的顶部,但是当我重新加载页面时,它从不显示更新的cookie ... 因为该cookie已经设置了没有"/"参数,并且以后不能修改,"/" "参数.

清除缓存并使用建议的代码后,我从浏览器清除了我的cookie并使用添加的参数设置方法,我能够操纵所有页面的cookie!非常感谢!!

Joe*_*l L 31

如果不添加$pathsetcookie(),则默认为"当前目录".这意味着如果您设置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, '/');
Run Code Online (Sandbox Code Playgroud)

  • 请注意,这不会更改已存在的 cookie。如果旧的 cookie 没有指定路径,则必须首先清除它。 (2认同)

Sab*_*lik 5

我认为您应该查看 setcookie 的路径参数。将其设置为 "/" ,以便可以从站点的所有目录/页面访问它。