php setcookie не работает с вызовом ajax - PullRequest
11 голосов
/ 12 апреля 2011

У меня есть страница, 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 былуже установлен без параметра "/" и не может быть изменен позже с помощью параметра "/".

После очистки кеша и работы с предложенным кодом, я очистил свои куки отбраузер и использовал добавленный параметр для метода set, я смог манипулировать куки со всех страниц !!!большое спасибо !!

Ответы [ 2 ]

32 голосов
/ 12 апреля 2011

Если вы не добавите значение $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, '/');
4 голосов
/ 12 апреля 2011

Я думаю, вы должны взглянуть на параметр пути setcookie. Установите для него «/», чтобы он был доступен для всех каталогов / страниц сайта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...