【问题标题】:Create cookie with cross domain创建跨域cookie
【发布时间】:2017-03-28 05:13:37
【问题描述】:

我正在研究 cookie。我可以很容易地创建 cookie。要创建一个 cookie,我使用以下代码:

HttpCookie aCookie = new HttpCookie("Cookie name");
aCookie.Value = "Value";
Response.Cookies.Add(aCookie); 

这段代码对我来说很好,它给了我 localhost 作为主机。但是当我尝试在这里添加一个域名时问题就来了:

HttpCookie aCookie = new HttpCookie("Cookie name");
aCookie.Value = "Value";
aCookie.Domain = "192.168.0.11";
Response.Cookies.Add(aCookie); 

现在没有生成 cookie。有什么建议吗?

【问题讨论】:

  • 感谢 Damien 的回复,对不起,我没有很好地解释问题。所以现在我正在解释这个。我的网站是 abc.com 域的主机,但我想在写作时添加 xyz.com 域饼干
  • 只是出于好奇,我能够“手动”(不是直接)创建一个跨域 cookie。我使用 localhost 网站创建了一个登录会话到另一个 www.domain.com。

标签: c# asp.net cookies


【解决方案1】:

出于安全原因,您只能将域设置为您自己(当前站点)和您自己的子域。您不能为任意网站设置 cookie。

【讨论】:

  • 感谢 Marc 的回复,对不起,我没有很好地解释问题。所以现在我正在解释这个。我的网站是 abc.com 域上的主机,但我想在写作时添加 xyz.com 域饼干——
  • @Sunny - 这就是马克所说的 - 你不能那样做。
  • @Sunny 是的,再说一遍:你不能那样做。 abc.com 可以向 abc.com、foo.abc.com 和 *.abc.com 写入 cookie;它根本无法为 xyz.com 编写 cookie
【解决方案2】:

正如马克所说——你不能这样做;除非该域是返回响应的域的子域。

同样的限制也适用于添加 cookie 的客户端上的 javascript 代码 - 将适用相同的来源策略。

实现此目的的一种简单方法通常是在从abc.com 返回的页面上包含对域xyz.com 上的资源的引用——通常是javascript 文件或类似文件。

不过,您必须小心,因为这是第三方 cookie,某些用户会禁用这些 cookie(因为这是广告跟踪的工作方式)。

【讨论】:

    【解决方案3】:

    假设您有一组已知的要跨域跟踪的 cookie,并且您拥有与之共享 cookie 的所有域,您可以自己构建此功能。这是穷人的跨域cookie跟踪:

    您可以将“?favoriteColor=red”添加到 abc.com 上指向 xyz.com 的所有链接

    <a href="xyz.com/contact?favoriteColor=red">XYZ Contact</a>
    

    然后对 xyz.com 上指向 abc.com 的所有链接执行相同的操作。

    <a href="abc.com/contact?favoriteColor=red">ABC Contact</a>
    

    现在在 abc.com 和 xyz.com 的每个页面上都需要检查 ?favoriteColor=red 的 http 请求路径,如果存在,则将该域上的 favoriteColor cookie 设置为红色。

    // Pseudocode
    if(queryString["favoriteColor"] != null) {
        setCookie("favoriteColor", queryString["favoriteColor"]);
    }
    

    提示 1:进行一些验证以确保您获得的值是有效的,因为用户可以输入任何内容。

    提示 2:如果您打算这样做,您应该使用 https。

    提示 3:请务必在 url 中转义您的 cookie 名称和值。

    【讨论】:

      猜你喜欢
      • 2011-08-06
      • 2011-03-21
      • 2013-02-11
      • 2018-12-15
      • 1970-01-01
      相关资源
      最近更新 更多