Redis托管Session
一:redis托管session主要是为了不同域之间共享session。Asp.net提供了四种处理Session的方法
1、 InProc模式
这是ASP.NET默认的Session管理模式,在应用进程内维护Session。
2、 StateServer模式
这是在服务器装了.NET环境后自带的一个StateServer服务,在应用进程外管理Session,可以进行多应用间的Session共享,在我看来这一模式最为适用于Web Garden模式。这在之前的博客里讲过。
3、 SQLServer模式
这是利用SQLServer进行Session的托管。其优点在于可以利用SQLServer的优势处理海量Session,在应用进程外、可持久化、安全性高等优点。SQLServer模式非常适用于Web Farm环境
4、 Custom模式
这是自定义模式,发挥空间很大,在拥有Provider的情况下,可以利用这一模式进行发挥,利用各种各样的数据存储程序进行Session管理。今天这篇博客主要讨论这一模式下的Redis托管Session的应用。
二:这里我们主要使用第四种,自定义模式。redis的内库需要4.0以下的,需要引用Harbour.RedisSessionStateStore.dll内库
连接:http://pan.baidu.com/s/1nuALNdB 密码:bd4n
web.config配置
//配置共享域 <httpCookies domain="/"/> <sessionState mode="Custom" customProvider="RedisSessionStateProvider" timeout="120"> <providers> <clear/> <add name="RedisSessionStateProvider" type="Harbour.RedisSessionStateStore.RedisSessionStateStoreProvider" host="xxx.xx.xx.xxx:6379" clientType="pooled"/> </providers> </sessionState>
Session["test"] = "测试session"; 如此存入的session都在redis端
三:session常用配置
<sessionState mode="Off|InProc|StateServer|SQLServer" cookieless="true|false" timeout="number of minutes" stateConnectionString="tcpip=server:port" sqlConnectionString="sql connection string" stateNetworkTimeout="number of seconds" />
mode 设置将Session信息存储到哪里:
— Off 设置为不使用Session功能;
— InProc 设置为将Session存储在进程内,就是ASP中的存储方式,这是默认值;
— StateServer 设置为将Session存储在独立的状态服务中;
— SQLServer 设置将Session存储在SQL Server中。
cookieless 设置客户端的Session信息存储到哪里:
— ture 使用Cookieless模式;这时客户端的Session信息就不再使用Cookie存储了,而是将其通过URL存储。比如网址为http://localhost/MyTestApplication/(ulqsek45heu3ic2a5zgdl245)/default.aspx
— false 使用Cookie模式,这是默认值。
timeout 设置经过多少分钟后服务器自动放弃Session信息。默认为20分钟。
stateConnectionString 设置将Session信息存储在状态服务中时使用的服务器名称和端口号,例如:"tcpip=127.0.0.1:42424”。当mode的值是StateServer是,这个属性是必需的。(42424是默认端口)。
sqlConnectionString 设置与SQL Server连接时的连接字符串。例如"data source=localhost;Integrated Security=SSPI;Initial Catalog=northwind"。当mode的值是SQLServer时,这个属性是必需的。
stateNetworkTimeout 设置当使用StateServer模式存储Session状态时,经过多少秒空闲后,断开Web服务器与存储状态信息的服务器的TCP/IP连接的。默认值是10秒钟。
五:遍历与销毁session
System.Collections.IEnumerator SessionEnum = Session.Keys.GetEnumerator(); while (SessionEnum.MoveNext()) { Response.Write(Session[SessionEnum.Current.ToString()].ToString() + " "); }
销毁:Session.Abandon()。
张占岭大神的博文有关于托管session的讲解:http://www.cnblogs.com/lori/p/5368722.html