跨域读取Cookie和session之HttpWebRequest另类方法(网站API开发)

在网上找了很多跨域读取Cookie的方法,但都是A域主动设置B域的Cookie,而没有B域去获取A域Cookie的方法。 所谓A域主动设置B域的Cookie 1:在B.com上新建一文件:SetCookie.aspx protected void Page_Load(object sender, EventArgs e) { HttpContext.Current.Response.AddHeader("p3p", "CP=CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"); HttpCookie cookie = new HttpCookie("userid", "44"); cookie.Domain = ".b.com"; // cookie.Expires = DateTime.Now.AddSeconds((double)expires); HttpContext.Current.Response.AppendCookie(cookie); } 2:在A域新建一文件:Default.aspx,在前台页面调用B域的SetCookie.aspx页面,来为B域设置相应的Cookie. < src="http://www.b.com/SetCookie.aspx"> 3:在B域新建一文件:Default.aspx来显示被A域设置的Cookie。 protected void Page_Load(object sender, EventArgs e) { Response.Write(Request.Cookies["userid"] == null ? "" : Request.Cookies["userid"].Value.ToString()); } 4:以此访问www.a.com/default.aspx---->www.b.com/default.aspx 以上为A域主动设置B域的Cookie,适用于单点登录,但必须在B域,C域或D域上新建setcookie.aspx文件来让A域帮忙设置Cookie。 那B域C域或D域如何根据自身的需要去主动获取A域的Cookie呢?请看以下方法,以下方法为此文重点。 1:在A域新建一文件:SetCookie.aspx,此文件用来设置A域自己的Cookie。 protected void Page_Load(object sender, EventArgs e) { HttpCookie cookie = new HttpCookie("userid", "44"); HttpContext.Current.Response.AppendCookie(cookie); } 2:A域的Cookie设置完了,那怎么让其他域来读取自己的Cookie呢,这就是重点了。 新建一页面:OpenID.aspx,用来让A域读取Cookie。(这里有点昏) protected void Page_Load(object sender, EventArgs e) { HttpContext.Current.Response.AddHeader("p3p", "CP=CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"); Response.Write(Request.Cookies["userid"] == null ? "" : "document.write(" + Request.Cookies["userid"].Value.ToString() + ")"); //注释一下:Response.Write中间的内容为:如果Request.Cookies["userid"]等于null,就输出空,否则就输出document.write(" + Request.Cookies["userid"].Value.ToString() + ")。注意看,发现“document.write”了吗,这其实是个java的脚本,为什么要这样写,看下面的。 } 3:在A域新建一文件:ReadCookie.aspx,这个文件用来读取OpenID.aspx. Response.Write(" < src=/"http://www.a.com/openid.aspx/">"); ReadCookie.aspx运行后,将会在页面上显示 Cookies["userid"]的值:44 4:A域的工作已经完了,那B域如何得到A域的这个Cookie值呢,那就太容易了,在B域新建一页:default.aspx直接爬A域的 ReadCookie.aspx文件的htm源码,所得到的内容就是 Cookies["userid"]的值:44。 string GetUserID(){ System.Net.HttpWebRequest req; System.Net.HttpWebResponse res; req = (System.Net.HttpWebRequest)System.Net.WebRequest.Create("http://www.a.com/ReadCookie.aspx"); res = (System.Net.HttpWebResponse)req.GetResponse(); System.IO.StreamReader strm = new System.IO.StreamReader(res.GetResponseStream(), Encoding.GetEncoding("utf-8")); string docment = strm.ReadToEnd(); res.Close(); res.Close(); strm.Close(); return docment; } 5: 依次访问 www.a.com/setcookie.aspx ------> www.b.com/default.aspx 此方法用于A域开发API给其他域调用。主要用于A域API接口的开发。就像现在的SNS网站提供当前登录的用户信息给其他应用程序(如抢车位)一样,不 过我不知道他们是怎么实现的,但我用此方法实现了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值