实现原理:cookie是不能跨域访问的,但是在二级域名是可以共享cookie的

概念说明:站点1=a.abc.com   站点2=b.abc.com

实现步骤:1. 配置两个站点的webconfig

2. a.abc.com写入cookie

3. b.abc.com读取cookie

一、配置Webconfig:

<httpRuntime targetFramework="4.0" />

我用的vs2012,默认生成的targetFramework=4.5 不知道为什么 4.5就不能跨域,有知道的朋友请指教。

<authentication mode="Forms">
     <forms domain="abc.com" name="abc.authcookie" protection="None" />
</authentication>

测试了N久,这三个属性少一个都不能访问。两个站点的authentication配置是一样的。

二、站点1写入cookie

//利用asp.net中的form验证加密数据,写入Cookie
      private HttpCookie GetAuthCookie(string userData, string userName)
     {

//登录票证
           FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
              3,
              userName,
              DateTime.Now,
              DateTime.Now.AddMinutes(100000),
              false,
              userData,
              FormsAuthentication.FormsCookiePath  //可在webconfig中设置 默认为/
           );

string encTicket = FormsAuthentication.Encrypt(ticket);

if ((encTicket == null) || (encTicket.Length < 1))
          {
                throw new HttpException("Unable_to_encrypt_cookie_ticket");
          }
          
          HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encTicket);
          cookie.Path = "/";
          cookie.HttpOnly = true;  //是否可通过脚本访问 设置为true 则不可通过脚本访问
          cookie.Domain = FormsAuthentication.CookieDomain;  //webconfig中设置的domain
          //cookie.Secure = FormsAuthentication.RequireSSL;  //当此属性为 true 时,该 Cookie 只能通过 https:// 请求来发送

if (ticket.IsPersistent)     //票证是否持久存储
          {
              cookie.Expires = ticket.Expiration;
          }

return cookie;
      }

三、站点2读取cookie

T user=null;

if (HttpContext.User != null
          && HttpContext.User.Identity.IsAuthenticated
          && HttpContext.User.Identity.Name != string.Empty
          && HttpContext.User.Identity.AuthenticationType == "Forms")
          {
                 FormsIdentity id = HttpContext.User.Identity as FormsIdentity;

if (id != null)
                {
                      FormsAuthenticationTicket ticket = id.Ticket;

user = this.DeserializeUserInfo(ticket.UserData);

if (user == null)
                      {
                          return false;
                      }

return true;

}
                else
                {
                     user = default(user);

return false;
                }
        }
        else
        {
             user = default(user);

return false;
        }

实现Cookie跨域共享的更多相关文章

  1. cookie跨域共享

    domain和path属性,domain就是当前域,默认为请求的地址,如网址为www.jb51.net/test/test.aspx,那么domain默认为www.jb51.net,path默认就是当 ...

  2. [php] cookie 跨域共享

    <?php // m.hinabian.com class Controller_Cookie extends Hnb_Base_Controller { public function ini ...

  3. 在ExpressJS中设置二级域名跨域共享Cookie

    问题:我使用expressjs和mongostore来管理session.下面是expressjs中的设置. app.configure(function(){ app.use(express.ses ...

  4. cookie用法小结 cookie.setPath 跨域共享

    1. JSP中Cookie的读写 Cookie的本质是一个键值对,当浏览器访问web服务器的时候写入在客户端机器上,里面记录一些信息.Cookie还有一些附加信息,比如域名.有效时间.注释等等. 下面 ...

  5. 跨域共享cookie和跨域共享session

    转载自:http://blog.csdn.net/ahhsxy/article/details/7356128 这里所说的跨域,是指跨二级域名,而且这些域名对应的应用都在同一个app上, 比如我有以下 ...

  6. 跨域共享cookie

    1. JSP中Cookie的读写 Cookie的本质是一个键值对,当浏览器访问web服务器的时候写入在客户端机器上,里面记录一些信息.Cookie还有一些附加信息,比如域名.有效时间.注释等等. 下面 ...

  7. cookie 跨域访问的解决方案

    Cookie 同域单点登录  最近在做一个单点登录的系统整合项目,之前我们使用控件实现单点登录(以后可以介绍一下).但现在为了满足客户需求,在不使用控件情况下实现单点登录,先来介绍一下单点登录.    ...

  8. session跨域共享解决方案

    要让session跨域共享,需要解决三个问题: 1.通过什么方法来传递session_id? 2.通过什么方法来保存session信息? 3.通过什么方法来进行跨域? 一.传递session_id有4 ...

  9. 关于Cookie跨域操作的一些总结

    正常的cookie只能在一个应用中共享,即一个cookie只能由创建它的应用获得. 1.可在同一应用服务器内共享方法:设置cookie.setPath("/");     本机to ...

随机推荐

  1. hadoop2的高可用性

    1   hadoop2  namenode由一个节点变成两个节点,同时在线,且同时只有一个是活跃的,如果一个出了问题,另外一个立即接替:没必要配置Secondary NameNode.Checkpoi ...

  2. oracle xmltype导入并解析Excel数据 (四)特别说明

    1.Excel导出,此处没有给出 2.错误原因在中间表,T_EXCEL_IMPORT_GENERATION,其中errormsg不为空的数据 3,中间表入库过程: 需要自己实现,为一个存储过程,存储过 ...

  3. 解决Tomcat7“At least one JAR was scanned for TLDs yet contained no TLDs”问题

    解决Tomcat7“At least one JAR was scanned for TLDs yet contained no TLDs”问题 2013-12-05 21:58:00|  分类: t ...

  4. clip 属性剪裁绝对定位元素

    如果left >= right或者bottom <= top,则元素会被完全裁掉而不可见,即“隐藏”.通过这种方式隐藏的元素是可以被屏幕阅读器等辅助设备识别的,从而提高了页面的可用性. I ...

  5. Bootstrap模态弹出窗

    Bootstrap模态弹出窗有三种方式: 1.href触发模态弹出窗元素: <a class="btn btn-primary" data-toggle="moda ...

  6. java 读写properties

    网速不好:先贴上资料: Java配置文件Properties的读取.写入与更新操作 [Spring] - Property注入 http://www.360doc.com/content/14/073 ...

  7. pylab,matplotlib Invalid DISPLAY variable

    在cetos 服务器使用源码包,安装matplotlib, 安装成功后, import pylab as pl pl.figure(figsize=(16,8)) python 解析器报错,Inval ...

  8. js +1的动画效果

    var fnPlusAnimate = function(str, options){ if (typeof str === 'object') { options = str; str = unde ...

  9. Mysql使用mysqldump按时间导出时的一个注意事项

    在使用Mysql的mysqldump命令按时间进行数据导出时,我们可能会遇到导出数据与原库中不符或者导出数据和我们期望的数据不同的情况. 我们知道Mysql数据库导出可以使用命令mysqldump,使 ...

  10. Zookeeper概论(对zookeeper的概论、原理、架构等的理解)

    Zookeeper概论(对zookeeper的概论.原理.架构等的理解) 一.概论 Zookeeper是一个分布式的.开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是h ...