【问题标题】:Deleting a cookie from a different domain when running locally在本地运行时从不同域中删除 cookie
【发布时间】:2013-10-17 16:51:04
【问题描述】:

根据 cookie 规范,这是不允许的(与 ajax 调用的同源策略相同的原则)。就 SOP 而言,当您从 file:/// 运行 javascript 时(例如在 UIWebView 内部),它并不适用。这是有据可查的,并且在我的示例中也有效。饼干呢?

我有一个应用程序通过运行 javascript 向服务器发出请求,用于所有意图和目的,本地 (file:///)。身份验证请求设置一个名为“alpha”、路径:“/”和域“serverdomain.com”的 cookie。在注销期间,我需要清除上述 cookie,但我感觉我的尝试失败了,因为我无权访问它,因为它被认为来自不同的域。这听起来很熟悉吗?还是我离这儿很远?有没有办法完成这样的壮举?

示例

我在 Chrome 上运行我的 javascript(使用 file:/// 作为 URI)。我开始登录,很快我就可以在 cookie 管理器插件中看到以下 cookie(这不是实际的 cookie,但除了我们可以说它是 'alpha' 的名称外,它看起来一样)。该 cookie 并未仅标记为 http,而是选中了“会话”和“安全”复选框(与下面的屏幕截图不同)。

现在请记住,如果我使用 Chrome 的“检查元素”功能并转到“Cookie”,我会收到“此站点没有 Cookie”。

在注销期间,我需要删除该 cookie。所以我在javascript中这样做:

document.cookie="alpha=; expires=Thu, 10 May 2000 15:07:07 GMT"

cookie 不会消失。我可以让它消失的唯一方法是从 cookie 管理器中删除它。我应该能够删除这个 cookie(从 file:/// 运行时)吗?如果有怎么办?

【问题讨论】:

    标签: javascript cookies setcookie


    【解决方案1】:

    如果 cookie 是在不同的域上创建的,则客户端不会将此 cookie 发送到第二个域上的服务器,因此您无法将其删除。您可以在此域上设置一个同名的 cookie,但它与第一​​个域上存在的 cookie 不同。

    【讨论】:

    • 不确定这是否能回答我的问题。 cookie 由服务器设置并返回给客户端。我对该服务器发出的每个后续请求都包含相同的 cookie。问题变成了,我怎样才能删除 cookie,以便对服务器的嵌套请求没有发送 cookie。由于我似乎是从不同的域运行的,这可能吗?
    • @fnCzar,如果您在不同的域上运行,客户端根本不会发送 cookie。但是,如果您说客户端正在发送 cookie,这意味着该 cookie 是在此域上创建的,您可以通过将其 expires 标头设置为过去的日期来将其从服务器中删除。
    • 但问题是我可以从客户端删除吗?
    • 是的,如果它不是会话 cookie(即使用服务器的 HttpOnly 标志生成)并且您可以访问它。
    • cookie 的域属性是什么?
    猜你喜欢
    • 2012-05-19
    • 2020-06-05
    • 1970-01-01
    • 2012-12-12
    • 2012-06-02
    • 1970-01-01
    • 2011-04-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多