Может ли скрипт пользователя удалить куки с данного домена? - PullRequest
7 голосов
/ 03 февраля 2010

Может ли Greasemonkey удалить куки с данного домена? Если да, то как?

Ответы [ 2 ]

11 голосов
/ 16 марта 2012

Существуют серьезные ограничения на то, что Greasemonkey может удалить. Другие инструменты могут быть лучше для того, что вы хотите, см. Ниже. Но, если все эти условия выполнены:

  • Файлы cookie, которые вы хотите удалить, находятся на домене текущей страницы.
  • Они не "Безопасные куки" .
  • Вы просматриваете возможные пути, включая /, пустой путь и т. Д.
  • После загрузки страницы javascript не устанавливает файлы cookie.
  • То, что вы отслеживаете, действительно является «cookie». Многие веб-сайты используют различные другие методы, включая LSO, локальное хранилище и т. Д.

ТО , следующий код удалит их:

//--- Loop through cookies and delete them.
var cookieList  = document.cookie.split (/;\s*/);

for (var J = cookieList.length - 1;   J >= 0;  --J) {
    var cookieName = cookieList[J].replace (/\s*(\w+)=.+$/, "$1");

    eraseCookie (cookieName);
}

Где eraseCookie():
(Обратите внимание, что eraseCookie получает гораздо больше файлов cookie, пытаясь использовать все возможные пути и наиболее вероятные субдомены.)

function eraseCookie (cookieName) {
    //--- ONE-TIME INITS:
    //--- Set possible domains. Omits some rare edge cases.?.
    var domain      = document.domain;
    var domain2     = document.domain.replace (/^www\./, "");
    var domain3     = document.domain.replace (/^(\w+\.)+?(\w+\.\w+)$/, "$2");;

    //--- Get possible paths for the current page:
    var pathNodes   = location.pathname.split ("/").map ( function (pathWord) {
        return '/' + pathWord;
    } );
    var cookPaths   = [""].concat (pathNodes.map ( function (pathNode) {
        if (this.pathStr) {
            this.pathStr += pathNode;
        }
        else {
            this.pathStr = "; path=";
            return (this.pathStr + pathNode);
        }
        return (this.pathStr);
    } ) );

    ( eraseCookie = function (cookieName) {
        //--- For each path, attempt to delete the cookie.
        cookPaths.forEach ( function (pathStr) {
            //--- To delete a cookie, set its expiration date to a past value.
            var diagStr     = cookieName + "=" + pathStr + "; expires=Thu, 01-Jan-1970 00:00:01 GMT;";
            document.cookie = diagStr;

            document.cookie = cookieName + "=" + pathStr + "; domain=" + domain  + "; expires=Thu, 01-Jan-1970 00:00:01 GMT;";
            document.cookie = cookieName + "=" + pathStr + "; domain=" + domain2 + "; expires=Thu, 01-Jan-1970 00:00:01 GMT;";
            document.cookie = cookieName + "=" + pathStr + "; domain=" + domain3 + "; expires=Thu, 01-Jan-1970 00:00:01 GMT;";
        } );
    } ) (cookieName);
}

Дополнительная функция, для информации или отладки:

function listCookies () {
    var cookieList  = document.cookie.split (/;\s*/);

    for (var J = 0, numCookies = cookieList.length;   J < numCookies;  ++J) {
        console.log ("Cookie ", J, ": ", cookieList[J]);
    }
}



Ваш сценарий GM также может использовать приемы iFrame для удаления файлов cookie на сторонних доменах, но в целом GM не является лучшим способом обработки файлов cookie.

Не обманывайте себя никакими другими утверждениями, Greasemonkey и javascript просто не могут удалить cookie, если не будут выполнены все условия, перечисленные в верхней части этого ответа. Обратите внимание, что javascript и Greasemonkey не могут даже см. все файлы cookie на странице.

Greasemonkey - не лучший инструмент для этого, хотя его может быть достаточно для некоторых ситуаций.

Вот несколько более мощных решений:

  1. Использовать Выборочное удаление cookie . Он сохраняет нужные вам куки и удаляет остальные. Это делается нажатием очень удобной кнопки или автоматически, когда Firefox закрывается. Поддерживаются как белые, так и черные списки.
  2. Используйте BetterPrivacy для более хитрых LSO.
  3. Запустите CCleaner хотя бы раз в неделю, чтобы изгнать широкий спектр слежки и промахов.
  4. Для мощного, настраиваемого, полностью автоматизированного удаления файлов cookie, которое не имеет серьезных ограничений, которые имеет Greasemonkey, и которое выполняется чаще, чем Выборочное удаление файлов cookie , вы можете написать собственное расширение для браузера. *
0 голосов
/ 15 марта 2012

Вы должны иметь возможность удалить куки для открытого в данный момент сайта. Взгляните на скрипт Cookie Zapper , он может делать то, что вы хотите, и если нет, то источник, вероятно, укажет вам правильное направление.

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