К сожалению, к тому времени, когда диспетчер файлов cookie отправляет уведомление cookie-changed
о том, что информация уже потеряна, диспетчер файлов cookie знает только, для какого хоста добавляется файл cookie (и это может быть не хост страницы, устанавливающий файл cookie, если использовался параметр domain
). . Возможно даже, что URL-адреса вообще не было, например. если файл cookie установлен расширением.
Что вы можете сделать, так это зарегистрировать наблюдателя для уведомления http-on-examine-response
. Вы можете посмотреть Set-Cookie
заголовок канала, а также URL-адрес канала, поэтому, когда уведомление cookie-changed
будет отправлено позже, вы будете знать, какой веб-сайт несет ответственность. Что-то вроде этого:
var observer = require("observer-service");
observer.add("http-on-examine-response", function(subject, data)
{
subject.QueryInterface(Ci.nsIHttpChannel);
var cookieNames = [];
// There can be more than one Set-Cookie header, cannot use getResponseHeader
subject.visitResponseHeaders(function(header, value)
{
if (header.toLowerCase() == "set-cookie")
{
var match = /^([^\s=]+)=/.exec(value);
if (match)
cookieNames.push(match[1]);
}
});
if (cookieNames.length)
{
var url = channel.URI.spec;
// Remember that this url set the cookies or just clear the header
if (!isAllowedToSetCookies(url, cookieNames))
channel.setResponseHeader("Set-Cookie", "", false);
}
});
Примечание. Этот код не тестировался.
Документация: уведомления наблюдателя, nsIHttpChannel
person
Wladimir Palant
schedule
07.09.2012