Asp.net Session集中式管理主要有StateServer(状态服务器)、Sqlserver(数据库服务器)、自定义(如Redis缓存服务器)等,本文主要介绍StateServer模式和自定义模式(Redis缓存)的使用方法
     集中式管理Session主要应用在集群服务器,所以首先要模拟集群服务器,方法在同一个网站复制多份在IIS多个端口部署,然后是使用ngix模拟负载均衡效果,随机访问其中一台服务器,参考文章:http://www.cnblogs.com/yanweidie/p/4658136.html
 
 

一、StateServer

       数据库存储在单独一台机器的内存缓冲区中,使用Asp.net 状态服务来控制这个缓冲区,机器重启后数据会被清空,故适合于非持久化的数据。设置步骤如下:
       1、在web.config中设置
           <!--端口默认为:42424  过期时间为:20分钟-->
         <sessionState mode="StateServer" stateConnectionString="tcpip=127.0.0.1:42424" timeout="20" />
       2、开启远程服务器的StateSever功能
            编辑HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\aspnet_state\Parameters注册表项中的Port值和AllowRemoteConnection修改成1
       3、运行services.msc启动Asp.net 状态服务
       4、2,3步可使用批处理命名一起执行  (1:表示设置为允许远程访问,0:表示只允许本机、42424位默认端口,上线项目建议修改此端口提高安全性)
    reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\aspnet_state\Parameters" /v "AllowRemoteConnection" /t REG_DWORD  /d  /f
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\aspnet_state\Parameters" /v "Port" /t REG_DWORD /d /f net stop aspnet_state
net start aspnet_state pause
       5、参考文档
http://m.blog.csdn.net/blog/ahywg/39232809
      6、问题
           1、提高安全性
                a) 修改默认端口,参考上面的批处理命令
                b) 设置machineKey,参考http://www.cnblogs.com/ruiati/archive/2013/08/16/3262061.html
                  <machineKey decryptionKey="FD69B2EB9A11E3063518F1932E314E4AA1577BF0B824F369" validationKey="5F32295C31223A362286DD5777916FCD0FD2A8EF882783FD3E29AB1FCDFE931F8FA45A8E468B7A40269E50A748778CBB8DB2262D44A86BBCEA96DCA46CBC05C3" validation="SHA1" decryption="Auto"/>
     <sessionState cookieless="false" timeout="50" mode="StateServer" stateConnectionString="tcpip=127.0.0.1:42424"/>
 
2、共享session问题(多个服务器时Session不能共享,如A服务器设置Session["UserId"]=123,B服务器读取Session["UserId"]时返回null)
                  可能是域的问题,解决方案是在global.asax的Init方法加下述代码
 public override void Init()
{
base.Init();
foreach (string moduleName in this.Modules)
{
string appName = "MYAPP"; //可任意命名
IHttpModule module = this.Modules[moduleName];
SessionStateModule ssm = module as SessionStateModule;
if (ssm != null)
{
FieldInfo storeInfo = typeof(SessionStateModule).GetField("_store", BindingFlags.Instance | BindingFlags.NonPublic);
SessionStateStoreProviderBase store = (SessionStateStoreProviderBase)storeInfo.GetValue(ssm);
if (store == null)//In IIS7 Integrated mode, module.Init() is called later
{
FieldInfo runtimeInfo = typeof(HttpRuntime).GetField("_theRuntime", BindingFlags.Static | BindingFlags.NonPublic);
HttpRuntime theRuntime = (HttpRuntime)runtimeInfo.GetValue(null);
FieldInfo appNameInfo = typeof(HttpRuntime).GetField("_appDomainAppId", BindingFlags.Instance | BindingFlags.NonPublic);
appNameInfo.SetValue(theRuntime, appName);
}
else
{
Type storeType = store.GetType();
if (storeType.Name.Equals("OutOfProcSessionStateStore"))
{
FieldInfo uribaseInfo = storeType.GetField("s_uribase", BindingFlags.Static | BindingFlags.NonPublic);
uribaseInfo.SetValue(storeType, appName);
}
}
}
}
}
            

Session集中式管理的更多相关文章

  1. Atitit 分布式管理 vs 集中式管理

    Atitit 分布式管理 vs 集中式管理 1. 集中式管理缺点 1 1.1. 单点故障 1 1.2. 没有灵活性 1 1.3. 打败vs 征服 参考 尼可罗·马基雅弗利编著的<君主论> ...

  2. Splunk Enterprise architecture——转发器本质上是日志收集client附加负载均衡,indexer是分布式索引,外加一个集中式管理协调的中心节点

    Splunk Enterprise architecture and processes This topic discusses the internal architecture and proc ...

  3. Linux下Rsyslog日志远程集中式管理

    Rsyslog简介 Rsyslog的全称是 rocket-fast system for log,它提供了高性能,高安全功能和模块化设计.rsyslog能够接受从各种各样的来源,将其输入,输出的结果到 ...

  4. SpringBoot初始教程之Redis集中式Session管理

    1.介绍 有关Session的管理方式这里就不再进行讨论,目前无非就是三种单机Session(基于单机内存,无法部署多台机器).基于Cookie(安全性差).基于全局的统一Session管理(redi ...

  5. redis的hash操作在集中式session中的应用

    在集群部署时,为了高可用性的目的,往往把session进行共享,共享分为两种:session复制和集中式管理. redis在session集中式管理中可以起到比较大的作用. 制约session集中式共 ...

  6. iOS开发——源代码管理——git(分布式版本控制和集中式版本控制对比,git和SVN对比,git常用指令,搭建GitHub远程仓库,搭建oschina远程仓库 )

    一.git简介 什么是git? git是一款开源的分布式版本控制工具 在世界上所有的分布式版本控制工具中,git是最快.最简单.最流行的   git的起源 作者是Linux之父:Linus Bened ...

  7. Hadoop - Ambari集群管理剖析

    1.Overview Ambari是Apache推出的一个集中管理Hadoop的集群的一个平台,可以快速帮助搭建Hadoop及相关以来组件的平台,管理集群方便.这篇博客记录Ambari的相关问题和注意 ...

  8. ZooKeeper场景实践:(2)集中式配置管理

    1. 基本介绍 在分布式的环境中,可能会有多个对等的程序读取相同的配置文件,程序能够部署在多台机器上,假设配置採用文件的话,则须要为部署该程序的机器也部署一个配置文件,一旦要改动配置的时候就会很麻烦, ...

  9. 中小型研发团队架构实践七:集中式日志ELK

    一.集中式日志 日志可分为系统日志.应用日志以及业务日志,系统日志给运维人员使用,应用日志给研发人员使用,业务日志给业务操作人员使用.我们这里主要讲解应用日志,通过应用日志来了解应用的信息和状态,以及 ...

随机推荐

  1. 【BZOJ2301】【HAOI2011】Problem b [莫比乌斯反演]

    Problem b Time Limit: 50 Sec  Memory Limit: 256 MB[Submit][Status][Discuss] Description 对于给出的n个询问,每次 ...

  2. 【洛谷 P4886】 快递员 (点分治)

    这题因为一些小细节还是\(debug\)了很久...不过我第一次用脚本对拍,不亏. 先随便找一个点作为根,算出答案,即所有点对到这个点的距离和的最大值,并记录所有距离最大的点对.如果这个点在任意一个距 ...

  3. Linux make命令详解

    在linux环境下的工作,免不了需要经常编译C/C++源代码,所以make命令是我们经常都会用到的.当然make工具不一定针对C代码,它也可以维护其他各种代码,详见:man make    在列举其详 ...

  4. LeetCode 192:Reverse Bits

    Reverse bits of a given 32 bits unsigned integer. For example, given input 43261596 (represented in ...

  5. Raspberry Pi使用

    1. 介绍 笔者Raspberry Pi 2 Model B为例介绍 1.1 参数 Raspberry Pi 2 Model B硬件参数如下: · Broadcom BCM2836 900MHz 4核 ...

  6. C++实现高斯滤波器

    在matlab中,我们经常用到高斯滤波器,生成滤波器一般都是这样的函数psf =   fspecial('gauss', GaussSize, sigma),但是在vs2010中用到的高斯滤波器不能自 ...

  7. swap增加

    #创建17G的文件dd if=/dev/zero of=/data/swap/swap-1 bs=1024 count=16255000#设置为swap分区/sbin/mkswap /data/swa ...

  8. 【转】mybatis循环map的一些技巧

    原文地址:http://blog.csdn.net/linminqin/article/details/39154133 循环key: <foreach collection="con ...

  9. Java和Js的高精度计算

    转载自:http://blog.csdn.net/zhutulang/article/details/6844834#comments Java: import java.math.BigDecima ...

  10. python 九九乘法表

    for i in range(1,10): for j in range(1,i+1): print('%d x %d = %d\t' %(j, i, j*i),end="") p ...