Как убить зомби печенье - PullRequest
6 голосов
/ 30 июня 2011

Я не уверен, относится ли мой вопрос к к этому или нет.

IE9 удаляет этот файл cookie после закрытия браузера (ожидается), но Chrome 12, Firefox 5 и Opera 11 этого не делают. (Во время тестирования приведенного ниже примера каждый браузер был закрыт после нажатия «Удалить учетную запись». Затем они были вновь открыты через короткий промежуток времени, и во всех файлах cookie, кроме IE9, они все еще были.)

Вариант использования: Срок действия файла cookie истекает через 1 год после последнего посещения пользователем. Удаление учетной записи должно удалить cookie.

Вопрос:
(1/2) Почему IE9 делает правильные (ожидаемые) вещи, а другие нет?
(2/2) Как я могу гарантировать, что все браузеры уничтожат этот cookie?

Пример:

login.html

<!doctype html>
<html>
    <head>
        <title>Create Cookie Example</title>

        <script>
            function setCookie() {
                var expDate = new Date();
                expDate.setDate(expDate.getDate() + 365);
                document.cookie = "fakeCookie=" + escape("fake value")
                    + "; expires=" + expDate.toGMTString();
            }
        </script>
    </head>

    <body onload="setCookie()">
        <h1>Welcome</h1>
        <p>Lorem ipsum...</p>
        <hr size="1" />
        <p><a href="profile.html">User Profile</a></p>
    </body>
</html>

profile.html

<!doctype html>
<html>
    <head>
        <title>Delete Cookie Example</title>

        <script>
            function deleteConfirm() {
                if ( confirm("Are you sure you want to delete your account? "
                           + "All data will be lost; this action cannot be undone!")
                   ) deleteConfirmed()
                else return false

                return true;
            }

            function deleteConfirmed() {
                document.cookie = "fakeCookie=; expires=Thu, 01-Jan-70 00:00:01 GMT";
            }
        </script>
    </head>

    <body>
        <h1>User Profile</h1>
        <p>Lorem ipsum...</p>
        <hr size="1" />
        <p><a href="index.html" onclick="return deleteConfirm()">Delete Account</a></p>
    </body>
</html>

Редактировать: Исходное сообщение неправильно идентифицировало login.html как index.html (образуя циклическую ссылку, которая воссоздала бы cookie при удалении «аккаунта»).

1 Ответ

5 голосов
/ 01 июля 2011

ОП придумал этот ответ и первоначально отредактировал его в вопросе. Это просто репост, чтобы сохранить решение в ответном сообщении для семантики.

        <script>
            function deleteConfirm() {
                if ( confirm("Are you sure you want to delete your account? "
                           + "All data will be lost; this action cannot be undone!")
                   ) deleteConfirmed(); // <-- ** MISSED SEMICOLON HERE **
                else return false;      // <-- ** AND HERE **

                return true;
            }

            function deleteConfirmed() {
                document.cookie = "fakeCookie=; expires=Thu, 01-Jan-70 00:00:01 GMT";
            }
        </script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...