跨域读取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.
  1.     < 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.St reamReader(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网站提供当前登录的用户信息给其他应用程序(如抢车位)一样,不 过我不知道他们是怎么实现的,但我用此方法实现了。

你可能感兴趣的:(api,session,开发,cookie,另类)