Asp.Net iframe Cookie 域 的问题!
Web应用A中的a.htm中有一个iframe,iframe指向Web应用B的b.aspx(含Web应用B的Cookie读写操作,与A应用无关) B应用相当于广告发布系统应用,b.aspx即广告展现页面,A应用相当于广告发布站点,a.htm即广告发布页面
A应用部署于http://www.123.com下,B应用部署于http://www.456.com.cn下
a.htm代码如下
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body>
<div>
<iframe src="http://www.456.com.cn/aditem/b.aspx" width=500 heigth=300 frameborder=1 scrolling=no></iframe>
</div>
</body>
</html>
-----------------------------------------------------------------------------
b.aspx没有人工加任何代码
---------------------------------------
b.aspx.cs的page_load代码如下
for(int i=0;i<this.Request.Cookies.Count;i++){
if(this.Request.Cookies[i].HasKeys==true&&this.Request.Cookies[i].Name=="TCL"){
for(int j=0;j<this.Request.Cookies[i].Values.Count;j++){
string sname=this.Request.Cookies[i].Name;
string sitem=this.Request.Cookies[i].Values.AllKeys[j];
string svalue=this.Request.Cookies[i].Values[j];
this.Response.Cookies[sname][sitem]=svalue;
}
break;
}
}
this.Response.Cookies["TCL"]["ITEM"+DateTime.Now.ToString("yyyyMMddHHmmss")]=DateTime.Now.ToString("yyyyMMddHHmmss");
if(CADProvider.CADProvider.Domain!=null&&CADProvider.CADProvider.Domain!=""){
this.Response.Cookies["TCL"].Domain=CADProvider.CADProvider.Domain;
}
this.Response.Cookies["TCL"].Path="/aditem";
this.Response.Cookies["TCL"].Expires=DateTime.Now.AddHours(1);
-----------------------------------------------------------------------------
其中CADProvider.CADProvider.Domain为配置文件中读取的Cookie的域名
目的是打开http://www.123.com/a.htm时,http://www.456.com.cn/aditem/b.aspx会读写Cookie,都是www.456.com.cn/aditem/b.aspx自己用的,和www.123.com没有关系。
真是不明白了 CADProvider.CADProvider.Domain 配置为 www.456.com.cn / .456.com.cn / 456.com.cn / www.123.com / 123.com,Path设置和不设置 b.aspx都不能读写Cookie啊!
单独调用 http://www.456.com.cn/aditem/b.aspx ,Cookie读写都是正常的!
------------------------------
去请教了高人,说这是跨域写Cookie,虽然可以通过页面跳转的方式来写Cookie,但我的应用环境不允许进行页面跳转方式来写Cookie。
微软真是的,iframe中自己写自己的Cookie,又不访问其他域的Cookie,这也有安全隐患?
A应用部署于http://www.123.com下,B应用部署于http://www.456.com.cn下
a.htm代码如下
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body>
<div>
<iframe src="http://www.456.com.cn/aditem/b.aspx" width=500 heigth=300 frameborder=1 scrolling=no></iframe>
</div>
</body>
</html>
-----------------------------------------------------------------------------
b.aspx没有人工加任何代码
---------------------------------------
b.aspx.cs的page_load代码如下
for(int i=0;i<this.Request.Cookies.Count;i++){
if(this.Request.Cookies[i].HasKeys==true&&this.Request.Cookies[i].Name=="TCL"){
for(int j=0;j<this.Request.Cookies[i].Values.Count;j++){
string sname=this.Request.Cookies[i].Name;
string sitem=this.Request.Cookies[i].Values.AllKeys[j];
string svalue=this.Request.Cookies[i].Values[j];
this.Response.Cookies[sname][sitem]=svalue;
}
break;
}
}
this.Response.Cookies["TCL"]["ITEM"+DateTime.Now.ToString("yyyyMMddHHmmss")]=DateTime.Now.ToString("yyyyMMddHHmmss");
if(CADProvider.CADProvider.Domain!=null&&CADProvider.CADProvider.Domain!=""){
this.Response.Cookies["TCL"].Domain=CADProvider.CADProvider.Domain;
}
this.Response.Cookies["TCL"].Path="/aditem";
this.Response.Cookies["TCL"].Expires=DateTime.Now.AddHours(1);
-----------------------------------------------------------------------------
其中CADProvider.CADProvider.Domain为配置文件中读取的Cookie的域名
目的是打开http://www.123.com/a.htm时,http://www.456.com.cn/aditem/b.aspx会读写Cookie,都是www.456.com.cn/aditem/b.aspx自己用的,和www.123.com没有关系。
真是不明白了 CADProvider.CADProvider.Domain 配置为 www.456.com.cn / .456.com.cn / 456.com.cn / www.123.com / 123.com,Path设置和不设置 b.aspx都不能读写Cookie啊!
单独调用 http://www.456.com.cn/aditem/b.aspx ,Cookie读写都是正常的!
------------------------------
去请教了高人,说这是跨域写Cookie,虽然可以通过页面跳转的方式来写Cookie,但我的应用环境不允许进行页面跳转方式来写Cookie。
微软真是的,iframe中自己写自己的Cookie,又不访问其他域的Cookie,这也有安全隐患?
爱东东
我的各类资源收集收集网站 http://tag.iddgame.com
我的实验性技术网站 http://www.iddgame.com
我的魔兽世界网站 http://www.iddwow.com.cn