Firefox 从cookie获取主机

Firefox 从cookie获取主机,firefox,firefox-addon,firefox-addon-sdk,Firefox,Firefox Addon,Firefox Addon Sdk,我正在使用Firefox的插件SDK(v1.9)构建和扩展 我的应用程序应该在基于匹配URI的数据库添加(或更改)cookie时删除cookie 我通过在“cookie changed”中添加一个观察者来完成这项任务,并实现识别匹配的cookie并在找到匹配的cookie时删除该cookie 问题 我需要知道每个cookie是从哪个网站(URL)添加/更改的。不幸的是,当cookie管理器发送cookie changed通知信息已经丢失时,cookie管理器只知道添加cookie的主机(如果使用

我正在使用Firefox的插件SDK(v1.9)构建和扩展

我的应用程序应该在基于匹配URI的数据库添加(或更改)cookie时删除cookie

我通过在“cookie changed”中添加一个观察者来完成这项任务,并实现识别匹配的cookie并在找到匹配的cookie时删除该cookie

问题


我需要知道每个cookie是从哪个网站(URL)添加/更改的。

不幸的是,当cookie管理器发送
cookie changed
通知信息已经丢失时,cookie管理器只知道添加cookie的主机(如果使用了
参数,则它可能不是设置cookie的页面的主机)。甚至可能是,首先没有URL,例如,如果cookie是由扩展设置的

您可以注册查看响应时的
http
通知的观察者。您可以查看频道的
Set Cookie
标题以及频道URL,以便在稍后发送
Cookie更改
通知时,您将知道是哪个网站负责。如下所示:

var观察员=需要(“观察员服务”);
添加(“http检查响应”,函数(主题,数据)
{
subject.QueryInterface(Ci.nsIHttpChannel);
var cookieNames=[];
//可以有多个集Cookie标头,不能使用getResponseHeader
subject.visitResponseHeaders(函数(头,值)
{
if(header.toLowerCase()=“设置cookie”)
{
var match=/^([^\s=]+)=/.exec(值);
如果(匹配)
cookieNames.push(匹配[1]);
}
});
if(cookieNames.长度)
{
var url=channel.URI.spec;
//请记住,此url设置cookies或只清除标题
如果(!isAllowedToSetCookies(url,cookieNames))
channel.setResponseHeader(“设置Cookie”,false);
}
});
注意:此代码尚未测试


文档:,

我使用您的代码修改内容安全策略。在我调用
setResponseHeader
后,我在开发工具中看到header的旧值。是否有办法确保它工作正常?@nilflse:dev工具还使用
http on-examine-response
通知检查数据-如果他们的轮到时间早于您的扩展它们将显示原始值。因此,唯一确定的方法是查看标题更改是否会导致任何浏览器行为更改。请注意,我不确定CSP是如何在内部实现的-它很可能使用
http on examine response
通知,这意味着您正在修改he现在太迟了。