ASP.NET二级域名站点共享Session状态
  今天, 我要写的是如何在二级域名站点之间,主站点和二级域名站点之间共享Session。
  首先, Session要共享,站点之间SessionID必须要一致,那怎么保证SessionID一致呢?
  ASP.NET中的SessionID是存储在客户端的cookie之中键值为ASP.NET_SessionId用来维护浏览者Session对应关系的一个字符串,要想在二级域名站点之间,主站点和二级域名站点共享SessionID就必须先共享,那么我们就必须先实现ASP.NET_SessionId这一cookie的共享。
  A: CrossDomainCookieModule
  ------------------------------------------------------------------------------------------------
  public class CrossDomainCookie : IHttpModule
  {
   private string m_RootDomain = string.Empty;
   #region IHttpModule Members
   public void Dispose()
   {
   }
   public void Init(HttpApplication context)
   {
   m_RootDomain = ConfigurationManager.AppSettings["RootDomain"];
   context.EndRequest += new System.EventHandler(context_EndRequest);
   }
   void context_EndRequest(object sender, System.EventArgs e)
   {
   HttpApplication app = sender as HttpApplication;
   for (int i = ; i < app.Context.Response.Cookies.Count; i++)
   {
   app.Context.Response.Cookies[i].Domain = m_RootDomain;
   }
   }
   #endregion
  }
  上面的Module重设了所有cookie的domain到root domain, root domain在web.config中设置。也许有人会说这是眉毛胡子一把抓重写了所有cookie的domain, 那他也可以判断一下cookie的name, 如果为ASP.NET_SessionId的话才重写。
  如果主站点和二级域名站点是同一站点,那么做到这一步,你的session就已经共享了,因为Session的ID是相同的,而且Session容器也是同一个。
  如果主站点和二级域名站点是两个不同站点,则需要进行更多的操作了。
  如果两个站点是不同的服务器的话,解决方法要简单点:
  ) 使用相同的state server来存储Session.
  ) 在两个站点的web.config设置相同的machineKey.
  <machineKey
  validationKey="78AE3850338BFADCE59D8DDF58C9E4518E7510149C46142D7AAD7F1AD49D95D4"
  decryptionKey="5FC88DFC24EA123C"
  validation="SHA1"/>
  MachineKey的设置请参考http://msdn.microsoft.com/zh-cn/asp.net/w8h3skw9.aspx
  ) 给两个站点设置相同name
  这样做是为了确保两个站点的siteID相同,siteID是site name的hash值,注意请不要使用默认站点,因为默认站点的siteID并非site name的hash.
  如果两个站点是在同一的服务器的话,需要对CrossDomainCookie再作一下修改,此方法也可应用于两个站点在不同服务器的情况:
  ) 使用相同的state server来存储Session.
  ) 用反射来设置System.Web.SessionState.OutOfProcSessionStateStore的静态字段s_uribase的值
  public class CrossDomainCookie : IHttpModule
   {
   private string m_RootDomain = string.Empty;
   #region IHttpModule Members
   public void Dispose()
   {
   }
   public void Init(HttpApplication context)
   {
   m_RootDomain = ConfigurationManager.AppSettings["RootDomain"];
   Type stateServerSessionProvider = typeof(HttpSessionState).Assembly.GetType("System.Web.SessionState.OutOfProcSessionStateStore");
   FieldInfo uriField = stateServerSessionProvider.GetField("s_uribase", BindingFlags.Static | BindingFlags.NonPublic);
   if (uriField == null)
   throw new ArgumentException("UriField was not found");
   uriField.SetValue(null, m_RootDomain);
   context.EndRequest += new System.EventHandler(context_EndRequest);
   }
   void context_EndRequest(object sender, System.EventArgs e)
   {
   HttpApplication app = sender as HttpApplication;
   for (int i = ; i < app.Context.Response.Cookies.Count; i++)
   {
   app.Context.Response.Cookies[i].Domain = m_RootDomain;
   }
   }
   #endregion
   }
  完成这样的修改之后就可以实现Session的共享了。
  同样如果你是使用SQL server来存储Session, 也可以使用类似的方法来解决Session共享问题。 来源:Diy综合信息网.NET二级域名共享Session

.NET二级域名共享Session的更多相关文章

  1. asp.net基于StateServer的二级域名共享session

    备注:亲自试验有效,如果网友有通过下面的教程未实现session共享的,欢迎留言说明你遇到的问题.必有回复. 最近为实现的二级域名共享session纠结好久.网上的很多实现的方法试了都不行,查了很久才 ...

  2. PHP实现同服务器多个二级域名共享 SESSion

    现在很多分类信息网站都会分出很多个二级域名出来,比如:sh.ganji.com(上海赶集网), su.ganji.com(苏州赶集网)等等,像这种拥有多个二级域名的网站,该如何实现同步共享sessio ...

  3. Froms 认证 二级域名共享session登录凭证

    1. 需要共享的web.config 里需要加添 <authentication mode="Forms"> <forms name="/> &l ...

  4. 顶级域名和二级域名共享cookie及相互删除cookie

    在CSDN看到一个cookie设置domain时,如何删除的问题, 自己也只知道domain设置为顶级域名时可以被其他二级域名共享,但是如何删除还是有一点搞不清楚,所以特意测试了下cookie和dom ...

  5. TP、PHP同域不同子级域名共享Session、单点登录

    TP.PHP同域不同子级域名共享Session.单点登录 目的: 为了部署同个域名下不同子级域名共享会话,从而实现单点登录的问题,一处登录,同域处处子系统即可以实现自动登录. PHP支持通过设置coo ...

  6. Thinkphp框架下(同服务器下)不同二级域名之间session互通共享设置

    在Thinkphp框架下根目录打开index.php 在头部加入如下代码即可: //入口文件 define('DOMAIN','abc.com');//abc.com换成自己的跟域名 //以下两行是为 ...

  7. 设置二级域名共享一级域名Cookie和删除共享Cookie

     设置共享Cookie: 二级域名要想共享一级域名的cookie,只需要设置cookie.Domain = ".一级域名.com";   删除共享Cookie:  HttpCook ...

  8. php实现多域名共享session会话

    php会话机制参考:我的随笔 缘起 网站,通常会有多个服务器,多个子域名,每个节点运行着不同模块.有时为了整体体验,用户用同一个用户名.密码浏览整站,不用重复登录.这时候就需要多服务器共享sessio ...

  9. 二级域名 cookie session 共享

    setcookie('login','12345',0,'/','.abc.com'); session_set_cookie_params(0,'/','.abc.com');session_sta ...

随机推荐

  1. 第三百四十一节,Python分布式爬虫打造搜索引擎Scrapy精讲—编写spiders爬虫文件循环抓取内容—meta属性返回指定值给回调函数—Scrapy内置图片下载器

    第三百四十一节,Python分布式爬虫打造搜索引擎Scrapy精讲—编写spiders爬虫文件循环抓取内容—meta属性返回指定值给回调函数—Scrapy内置图片下载器 编写spiders爬虫文件循环 ...

  2. HTML5实现摇一摇的功能(实测后)--转

    eviceMotionEvent(设备运动事件)返回设备有关于加速度和旋转的相关信息.加速度的数据将包含三个轴:x,y和z(示意如下图所 示,x轴横向贯穿手机屏幕或者笔记本键盘,y轴纵向贯穿手机屏幕或 ...

  3. c# winform 获取当前程序运行根目录,winform 打开程序运行的文件夹

    // 获取程序的基目录. System.AppDomain.CurrentDomain.BaseDirectory // 获取模块的完整路径. System.Diagnostics.Process.G ...

  4. EayRadius 于 2013-7-19 进行体验度更新,增加用户体验度

    EasyRadius于2013-7-19进行更新,此次更新并没有更新通讯接口,通讯接口将统一更新,包括对其他路由的支持 下面我将主要更新的地方向大家描述一下 如果你有疑问或者建议,可以致电137799 ...

  5. 183使用 MediaPlayer Framework 框架播放视频

    效果如下: ViewController.h #import <UIKit/UIKit.h> #import <MediaPlayer/MediaPlayer.h> @inte ...

  6. windows mongodb最常用命令简单归纳

    在windows安装好了windows,首先记得要把mongodb bin目录路径放在 系统环境变量的path中,确定之后即配置好了mongo的环境变量,在dos命令框中输入mongo会出现如下 版本 ...

  7. Node.js之接收前台数据实例

    <form class="form-horizontal" method="post" action="http:127.0.0.1:3000/ ...

  8. hibernate 一级缓存,二级缓存,查询缓存

    1.一级缓存是session级的缓存,session结束即事务提交,session关闭,缓存清除.效果不大 get方式:一个session内,第二次查询不连数据库.适用于一级缓存 load方式:懒加载 ...

  9. 关于HTML标签嵌套的问题详解

    先说基础,HTML标签有两类: 1.块级元素 div.h1~h6.address.blockquote.center.dir.dl.dt.dd.fieldset.form.hr.isindex.men ...

  10. phpcms v9模板制作常用代码集合(转)

    phpcms v9模板制作常用代码集合(个人收藏) 1.截取调用标题长度 {str_cut($r[title],36,'')} 2.格式化时间 调用格式化时间 2011-05-06 11:22:33 ...