zoukankan      html  css  js  c++  java
  • 转 跨域读取Cookie和session之HttpWebRequest另类方法(网站API开发)

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

    若要转载,请注名出处 http://blog.csdn.net/try530/archive/2009/01/06/3721525.aspx

    所谓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.
        <script src="http://www.b.com/SetCookie.aspx%22%3E%3C/script>
    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:以此访问http://www.a.com/default.aspx----%3Ewww.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,用来让B域读取Cookie,并自动设置B域的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");
            if (Request.Cookies["userid"] != null)
            {
                Response.Write(@"
                var userid=" + Request.Cookies["userid"].Value.ToString() + @";
                SetCookie('userid',userid);//什么域调用此文件,设置的Cookie将是什么域的。
                window.location.href=document.URL;

                     function SetCookie(name,value)//两个参数,一个是cookie的名子,一个是值
                    {
                       document.cookie = name + ""=""+ escape (value) ;
                     }
                ");
            }
            else
            {
                Response.Write("document.write('没有cookie');");
            }
        }


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

     protected void Page_Load(object sender, EventArgs e)
            {
               if (HttpContext.Current.Request.Cookies["userid"] != null)
                {
                    Label1.Text = HttpContext.Current.Request.Cookies["userid"].Value.ToString();

                }
                else
                {

                    Response.Write(" <script src=\"http://www.a.com/openid.aspx/%22%3E%3C/script>");
                 
                }
            }

    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.
    3:调用B域时,发现没有cookie就自动从A域获取cookie值来设置自己的Cookie。
    A域可以把怎么读取的方法做成dll,提供给其他域。这称之为A域的API。

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


    本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/try530/archive/2009/01/06/3721525.aspx

  • 相关阅读:
    Docker+geoserver发布shp地图服务
    Docker中运行命令时提示:Cannot connect to the Docker daemony...以及设置docker开机启动
    Docker在服务器之间怎样导入导出镜像(服务器之间容器复制)
    Docker+Tomcat+geoserver+shp发布地图服务
    Windows中将文件压缩成linux支持的tar.gz格式的压缩包
    Docker怎样提交镜像(把容器打成镜像)
    Docker中宿主机与容器之间互传文件(docker cp的方式)
    移动零
    旋转数组
    有序数组的平方
  • 原文地址:https://www.cnblogs.com/flyfish/p/1523204.html
Copyright © 2011-2022 走看看