打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

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

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

时间:2009-10-25 14:58来源:未知 作者:admin 点击:

880次

在网上找了很多跨域读取Cookie的方法,但都是A域主动设置B域的Cookie,而没有B域去获取A域Cookie的方法。 所谓A域主动设置B域的Cookie 1:在B.com上新建一文件:SetCookie.aspx protected void Page_Load( object sender, EventArgs e) { HttpContext.Curren

http://szrdedu.com我爱学习网

在网上找了很多跨域读取Cookie的方法,但都是A域主动设置B域的Cookie,而没有B域去获取A域Cookie的方法。

http://szrdedu.com我爱学习网

所谓A域主动设置B域的Cookie

http://szrdedu.com我爱学习网

1:在B.com上新建一文件:SetCookie.aspx

http://szrdedu.com我爱学习网

1. protected void Page_Load(object sender, EventArgs e)

2. {

3. 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");

4. HttpCookie cookie = new HttpCookie("userid", "44");

5. cookie.Domain = ".b.com";

6.

7. // cookie.Expires =

DateTime.Now.AddSeconds((double)expires);

8. HttpContext.Current.Response.AppendCookie(cookie);

9. }

2:在A域新建一文件:Default.aspx,在前台页面调用B域的SetCookie.aspx页面,来为B域设置相应的Cookie.

1. <script src="//www.b.com/SetCookie.aspx"></script> 3:在B域新建一文件:Default.aspx来显示被A域设置的Cookie。

1. protected void Page_Load(object sender, EventArgs e)

2. {

3.

4. Response.Write(Request.Cookies["userid"] == null ? "" : Request.Cookies["userid"].Value.ToString());

5.

6. }

4:以此访问www.a.com/default.aspx---->www.b.com/default.aspx

以上为A域主动设置B域的Cookie,适用于单点登录,但必须在B域,C域或D域上新建setcookie.aspx文件来让A域帮忙设置Cookie。

http://szrdedu.com我爱学习网

那B域C域或D域如何根据自身的需要去主动获取A域的Cookie呢?请看以下方法,以下方法为此文重点。

http://szrdedu.com我爱学习网

1:在A域新建一文件:SetCookie.aspx,此文件用来设置A域自己的Cookie。

1. protected void Page_Load(object sender, EventArgs e)

2. {

3. HttpCookie cookie = new HttpCookie("userid", "44");

4. HttpContext.Current.Response.AppendCookie(cookie);

5. }

2:A域的Cookie设置完了,那怎么让其他域来读取自己的Cookie呢,这就是重点了。

新建一页面:OpenID.aspx,用来让B域读取Cookie,并自动设置B域的cookie。(这里有点昏)

http://szrdedu.com我爱学习网

3:A域的工作已经完了,那B域如何得到A域的这个Cookie值呢,在B域新建一页:default.aspx

3:调用B域时,发现没有cookie就自动从A域获取cookie值来设置自己的Cookie。(责任编辑:admin)

A域可以把怎么读取的方法做成dll,提供给其他域。这称之为A域的API。

测试成功,用此方法能跨域读取session,方式是:把A域的Session值存入B域的cookie中。至于怎么存,存在什么cookie名称里,由A域提供。

1. protected void Page_Load(object sender, EventArgs e)

2. {

3. 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");

4. if (Request.Cookies["userid"] != null)

5. {

6. Response.Write(@"

7. var userid=" +

Request.Cookies["userid"].Value.ToString() + @";

8. SetCookie('userid',userid);//什么域调用此文件,设置的Cookie将是什么域的。

9. window.location.href=document.URL;

10.

11. function SetCookie(name,value)//两个参数,一个是cookie的名子,一个是值

12. {

13. document.cookie = name + ""=""+ escape (value) ;

14. }

15. ");

16. }

17. else

18. {

19. Response.Write("document.write('没有cookie');");

20. }

21. }

http://szrdedu.com我爱学习网

1. protected void Page_Load(object sender, EventArgs e)

2. {

3. if (HttpContext.Current.Request.Cookies["userid"] != null)

4. {

5. Label1.Text =

HttpContext.Current.Request.Cookies["userid"].Value.ToString(); 6.

7. }

8. else

9. {

10.

11. Response.Write((责任编辑:admin)

12. " <script src=\"http://www.a.com/openid.aspx\"></script>");

13.

14. }

15. }

16.

4:依次访问 www.a.com/setcookie.aspx ------>

www.b.com/default.aspx 此方法用于A域开发API给其他域调用。主要用于A域API接口的开发。就像现在的SNS网站提供当前登录的用户信息给其他应用程序(如抢车位)一样,不过我不知道他们是怎么实现的,但我用此方法实现了。

总结下此方法的步骤:

1:A域设置cookie

2:B域用调用javascript脚本的方式读取A域cookie,读取后,并同步设置B域Cookie.

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Cookie操作公共方法类-程序开发-红黑联盟
.net 完美操作cookies
C#操作Cookie的帮助类
c#中cookies的存取操作
.NET Core:在ASP.NET Core WebApi中使用Cookie
Asp.Net加密Cookes
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服