首先确认目的:这里跨域操作 cookies并不是 一个A 网站直接操作任意B网站的cookies。如果允许这么干那么天下大乱了,如果不甚了解请去google
那么这次的实验情景
情景: 有www.a.com ,www.b.com 两个网站, www.b.com有个开放给第三方系统登陆即接受第三方系统传过来的用户参数的登陆页面,但是这里登陆成功后的标识是写cookies的,为了模拟 我在本机设置了 域名地址映射 C:\Windows\System32\drivers\etc 下 host 文件 添加 127.0.0.1 www.a.com 127.0.0.1 www.b.com
并且把 www.a.com使用8111端口 ,www.b.com使用 8112端口
页面:
www.a.com有页面 IframeBAndSetBcookies.aspx 代码如下:
<iframe src="http://www.b.com:8112/SetBCookies.aspx">
</iframe>
www.b.com 有页面 SetBCookies.aspx 代码如下:
C#
protected void Page_Load(object sender, EventArgs e)
{
//HttpContext.Current.Response.Headers.Add("P3P", "CP=\"CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR\"");
FormsAuthentication.SetAuthCookie("zlj",false);
}
www.b.com 有页面 ViewResult.aspx 代码如下
protected void Page_Load(object sender, EventArgs e)
{
string UserName =HttpContext.Current.User.Identity.Name;
this.Label1.Text = UserName;
}
直接浏览 http://www.a.com:8111/IframeBAndSetBcookies.aspx 然后 浏览 http://www.b.com:8112/ViewResult.aspx 结果 没有任何值,
如果 将www.b.com SetBcookies.aspx页面 的代码 其中的 p3p的注释去掉,即改为如下
protected void Page_Load(object sender, EventArgs e)
{
HttpContext.Current.Response.Headers.Add("P3P", "CP=\"CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR\"");
FormsAuthentication.SetAuthCookie("zlj",false);
}
直接浏览 http://www.a.com:8111/IframeBAndSetBcookies.aspx 然后 浏览 http://www.b.com:8112/ViewResult.aspx 结果 为 zlj
总结 ,因为ie对 cookies的限制比较严格 可以使用 p3p 的 header 解决,当然也可以 在iis的 www.b.com上设置http响应头 上添加 p3p头