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

原文地址:https://www.cnblogs.com/xiaoyaodijun/p/6632548.html