Работа с куками, удаление кук отдельных сайтов на iMacros

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

var imJS = {
    get Ci() {
        return Components.interfaces;
    },
    get Cu() {
        return Components.utils;
    },
    setCookie: function setCookie(cookies) {
        this.Cu.import("resource://gre/modules/Services.jsm");
        for (var i = 0; i < cookies.length; i++) {
            Services.cookies.add(cookies[i].host, cookies[i].path,
                cookies[i].name, cookies[i].value, cookies[i].isSecure,
                cookies[i].isHttpOnly, cookies[i].isSession, cookies[i].expiry);
        };
    },
    getCookie: function(domain) {
        this.Cu.import("resource://gre/modules/Services.jsm")
        var services = Services.cookies.getCookiesFromHost(domain);
        var listCookies = [];
        while (services.hasMoreElements()) {
            var cookie = services.getNext().QueryInterface(this.Ci.nsICookie2);
            listCookies.push(cookie);
        };
        return listCookies;
    },
}
// Использвоние
imJS.getCookie('vk.com');    // Получаем куки и сохраняем в json файл или как удобно на диск
// В следущем заходе берем куки с диска, переводите в массив JSON.parse()
imJS.setCookie(cookies /* Передаем массив кукис */ )

Структура этого кода мне не понятна, это не совсем яваскрипт, но можно переделать под обычные функции. По сути идет работа с менеджером куки через компоненты мозиллы и в цикле перебираются все куки по очереди. Используя getCookiesFromHost(domain); получают список всех кук конкретного домена - сайта. То есть можно даже удалять куки отдельного сайта, если это необходимо. С кодом нужно немного поковыряться, поправить, дописать и сделать для себя то что нужно.
Так же полезное можно получить из mozilla.org, правда все на английском, но кое что можно извлечь для себя.

Components.utils.import("resource://gre/modules/Services.jsm");
var cookieService = Services.cookies;

К примеру, может помочь метод удаления кук
void remove(in AUTF8String aHost, in ACString aName, in AUTF8String aPath, in boolean aBlocked, in  jsval  aOriginAttributes);  
void removeAll();
 А в самом верху страницы еще есть пара строчек:
This interface is intended to be used as a service. It is implemented by the @mozilla.org/cookiemanager;1 component, but should generally be accessed via Services.cookies
Только нужно правильно его применить, видимо. Из выше указанного кода можно переделать функции, которые будут сохранять куки на диск, а при следующем заходе подгружать их. Код в таком виде как он есть, естественно работать не будет.
Полезная ссылочка nsICookieManager2
nsICookieManager
Конец.

Комментариев нет:

Отправить комментарий