【问题标题】:Set/Delete Cookies on cross subdomain Server Side and JavaScript在跨子域服务器端和 JavaScript 上设置/删除 Cookie
【发布时间】:2012-12-16 12:45:57
【问题描述】:

我有 domain.com、sub1.domain.com 和 sub2.domain.com。从 sub1.domain.com 的站点,我调用一个脚本在 domain.com 上设置 cookie,如下所示

document.cookie = "KEY=Value; domain=.domain.com; path=/; expires=Thu, 01 Jan 2013 00:00:01 GMT";

我检查浏览器并查看该 cookie。看起来不错。之后我去 sub2.domain.com 修改或删除我创建的 cookie。

document.cookie = "KEY=Deleted; domain=.domain.com; path=/; expires=Thu, 01 Jan 1990 00:00:01 GMT";

但运气不好,Cookie 仍然存在,价值仍然存在。我应该怎么做才能从子域中删除根 cookie?

编辑:

为了清楚起见:我使用 citrix 单点登录在两个域上进行身份验证。我们只需要登录到 .domain.com 和 citric 将验证其余部分。但问题是它没有退出机制,所以我决定清除 cookie。当我使用浏览器插件清除它时它会起作用。但是当涉及到代码(javascript)时,它就行不通了。有谁知道这个

【问题讨论】:

  • 我预见到 2 个可能的问题。第一个是您实际上看不到此 cookie 可用于 domain.com,因为它不匹配域模式(.domain.com 可以匹配任何 *.domain.com,包括 www.domain.com,但不是 domain.com 没有子域)。看来,您第一次从 su​​b1 或 sub2 检查 cookie,而第二次从主域检查它。第二个可能的问题是您有不同的 sheme(即 http 和 https)或端口号(从问题中不清楚)。
  • 我用 forefox 检查了 cookie,我看到了... .domain.com 是正确的。我不确定http或https会影响吗?

标签: javascript asp.net session cookies citrix


【解决方案1】:

好的,我知道问题所在!那些 cookie 是 httponly cookie,这意味着我们不能通过 javascript 访问。我必须在服务器端修改它们

HttpCookie expiredCookie = new HttpCookie("CookieName");
expiredCookie.Expires = DateTime.UtcNow.AddDays(-1);
expiredCookie.Path = "/";
expiredCookie.Domain = ".domain.com";
Response.Cookies.Add(expiredCookie);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-18
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 2019-04-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多