使用跨域创建cookie

时间:2012-03-05 09:27:14

标签: c# asp.net cookies

我正在研究cookies。我可以很容易地创建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。有什么建议吗?

3 个答案:

答案 0 :(得分:11)

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

答案 1 :(得分:2)

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

同样的限制也适用于客户端添加cookie的javascript代码 - 同样的原始政策将适用。

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

你必须注意那里,因为那是第三方cookie,有些用户会禁用这些(因为这是广告跟踪的工作方式)。

答案 2 :(得分:0)

假设您想要跨域跟踪一组已知的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名称和值。