备注:亲自试验有效,如果网友有通过下面的教程未实现session共享的,欢迎留言说明你遇到的问题。必有回复。

最近为实现的二级域名共享session纠结好久。网上的很多实现的方法试了都不行,查了很久才找到了实现的方法。在这里记录下,以备以后所需。

二级域名共享session有多种实现方法:第一种依赖于cookie。第二种直接共享session。

我这里分享的是第二种直接共享session。session的存储方法有三种 InProc, StateServer, SQLServer。

这里分享的基于StateServer的存储方试。

实现的思路:让主域名和二级域名的ASP.NET_SessionId 保持一致。

实现的步骤:

第1步.把sessionState的存储方式改为:StateServer,默认是InProc。 tcpip=127.0.0.1:42424  这段是指本机的意思。我试验的是主域名和二级域名都在都一台服务器上。如下图红色框框区域:

第2步.在system.web结点下添加结点 <httpCookies domain=".test.com"/> ,这里test.com改为你自己的域名。这个结点的功能就是实现ASP.NET_SessionId 保持一致。

查看ASP.NET_SessionId的方法可以用google浏览器打开网页,然后F12,如下面板查看ASP.NET_SessionId

第3步在Global.asax中添加如下代码。

   public override void Init()
{
base.Init();
foreach (string moduleName in this.Modules)
{
string appName = "APPNAME";
IHttpModule module = this.Modules[moduleName];
SessionStateModule ssm = module as SessionStateModule;
if (ssm != null)
{
System.Reflection.FieldInfo storeInfo = typeof(SessionStateModule).GetField("_store", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);
SessionStateStoreProviderBase store = (SessionStateStoreProviderBase)storeInfo.GetValue(ssm);
if (store == null)//In IIS7 Integrated mode, module.Init() is called later
{
System.Reflection.FieldInfo runtimeInfo = typeof(HttpRuntime).GetField("_theRuntime", System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.NonPublic);
HttpRuntime theRuntime = (HttpRuntime)runtimeInfo.GetValue(null);
System.Reflection.FieldInfo appNameInfo = typeof(HttpRuntime).GetField("_appDomainAppId", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);
appNameInfo.SetValue(theRuntime, appName);
}
else
{
Type storeType = store.GetType();
if (storeType.Name.Equals("OutOfProcSessionStateStore"))
{
System.Reflection.FieldInfo uribaseInfo = storeType.GetField("s_uribase", System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.NonPublic);
uribaseInfo.SetValue(storeType, appName);
}
}
}
}
}

OK,主域名和二级域名都实现上面的三个步骤就可以了。本文为拎壶充原创文章,转载请注明原文地址:http://www.cnblogs.com/liaohuolin/p/4502554.html

asp.net基于StateServer的二级域名共享session的更多相关文章

  1. .NET二级域名共享Session

    ASP.NET二级域名站点共享Session状态 今天, 我要写的是如何在二级域名站点之间,主站点和二级域名站点之间共享Session. 首先, Session要共享,站点之间SessionID必须要 ...

  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. 设置二级域名共享一级域名Cookie和删除共享Cookie

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

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

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

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

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

  9. 黄聪:Wordpress二级域名共享用户cookie出现错误解决方案及WP的Cookie机制

    在若干年以前,我刚开始折腾Wordpress没多久的时候,就自己摸索过 多个Wordpress网站共享一份数据表的实现方法 .这种看起来好像很高大上的类SSO功能,能够给用户在多个网站之间提供快速.无 ...

随机推荐

  1. VS与SQL资源

    经常在网上看到有同学费尽心思的找SQL server数据库各版本的下载地址,看到别人的求助贴就不自觉的想去帮助他们,但是一个一个去帮助又不太现实,毕竟个人精力有限,既然大家有需求,那么笔者就本着乐于分 ...

  2. 【C语言】练习3-5

     题目来源:<The C programming language>中的习题P51  练习2-1:  编写函数itob(n, s, b),将整数n转换为以b为底的数,并将转换结果以字符的形 ...

  3. 虚拟化—Docker解决方案

    What is Docker? Docker is an open-source project to easily create lightweight, portable, self-suffic ...

  4. [企业化NET]Window Server 2008 R2[1]-服务器基本安装即问题解决记录

    1.  服务器基本安装即问题解决记录      √ 2.  SVN环境搭建和客户端使用 2.1  服务端 和 客户端 安装    √ 2.2  项目建立与基本使用     √ 2.3  基本冲突解决, ...

  5. 构建你的长寿命的API第1部分:规范驱动的API开发

    构建你的长寿命的API第1部分:规范驱动的API开发 这篇文章是由MuleSoft的Mike Stowe在nginx.conf 2016公布的演示文稿改编的.第一部分重点是规范驱动的API开发. 第二 ...

  6. Java 垃圾回收思维导图

    文 by / 林本托 Tips 做一个终身学习的人. Java 的垃圾回收,不像 C和 C++语言,内存的分配和释放都是靠程序员来控制的.而 Java 的内存回收,程序员是不能也是无法干预,具体什么时 ...

  7. Groovy 学习手册(3)

    五. Groovy 的设计模式 设计模式是一种非常好的方式,可以使你的代码变得实用,可读又具有扩展性.跟 Java 相比,在 Groovy 里使用设计模式使代码更加简洁和容易. 1. 策略模式 设想一 ...

  8. Microsoft.ACE.OLEDB.12.0 及其在 MSSQL中的使用

    1.Microsoft.ACE.OLEDB.12.0 简介 就是一个数据访问接口,用于在office文件和非office应用程序间传输数据.例如 Microsoft Office Access 201 ...

  9. junit 用法实例

    package com.zy.junit.test; import org.junit.After;import org.junit.AfterClass;import org.junit.Befor ...

  10. 【转载并整理】JAVA解析或生成xml的四种方法

    参考文章 1:http://blog.csdn.net/clemontine/article/details/53011362 2:http://www.jb51.net/article/98456. ...