创建跨域cookie

本文关键字:cookie 创建 | 更新日期: 2023-09-27 18:26:47

我正在处理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。有什么建议吗?

创建跨域cookie

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

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

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

实现这一点的一个简单方法通常是在从abc.com返回的页面上的某个位置包含对域xyz.com上资源的引用——通常是javascript文件或类似的东西。

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

假设您有一组已知的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的每一个页面上,都需要检查http请求路径?favoriteColor=红色,如果存在,请将该域上的favoriteColor cookie设置为红色。

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

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

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

技巧3:确保url转义你在url中的cookie名称和值。