ASP.Net自定义会话状态管理

时间:2011-03-04 14:58:16

标签: asp.net session-state

是否可以构建完全自定义的会话状态模式而不是使用Inproc或SQLServer?

4 个答案:

答案 0 :(得分:11)

是的,绝对可以通过实现custom session state store provider类编写SessionStateStoreProviderBase,然后在web.config中将会话状态模式设置为此自定义实现:

<sessionState 
    mode="Custom"
    customProvider="SomeCustomProviderName">
    <providers>
        <add name="SomeCustomProviderName"
             type="YourNamespace.CustomSessionStateStore"
             connectionStringName="SomeConnectionString" />
    </providers>
</sessionState>

答案 1 :(得分:1)

这是一个较旧的问题,涉及到我在2014年10月和现在所做的事情。

基本上,原始答案仍然是正确的,因为您可以构建自己的自定义OutProc会话状态管理系统,但由于Microsoft现在更多地参与开源,您可以轻松地前往MSOpenTech and download the Redis port for Windows Windows Azure也支持此功能。

Redis是一个OutProc会话状态管理系统,可以在独立的进程/控制台窗口中运行,也可以作为背板会话/密钥值存储的Windows服务运行。

<强> MSOpenTech:

  

Redis是一种非常流行的开源,网络,内存中的键值   数据存储。它以高性能,灵活性和丰富的设备而闻名   数据结构和简单直接的API。 MS Open Tech有   一直在与Redis社区合作,以建立一个生产就绪的   Redis的Windows端口,包括64位支持,安装程序   Windows Azure,NuGet支持等等。

Redis.io简介:

  

Redis是一个开源的,BSD许可的,高级键值缓存和   商店。它通常被称为数据结构服务器,因为密钥   可以包含字符串,散列,列表,集,排序集,位图和   hyperloglogs

您可以使用它来存储ASP.NET MVC,WebAPi和SignalR的会话状态,这在Web场环境中非常方便。

  

安装包Microsoft.Web.RedisSessionStateProvider

它可以通过web.config轻松配置,当我说容易时,我的意思很简单。

<system.web>
  <sessionState mode="Custom" customProvider="MySessionStateStore">
      <providers>
        <add name="MySessionStateStore" type="Microsoft.Web.Redis.RedisSessionStateProvider" host="127.0.0.1" port="6379" accessKey="" ssl="false" />
      </providers>
    </sessionState>
</system.web>

事实上我很容易认为我一定是做错了。 ;) 但是,只需将会话状态转移到Redis即可。

它是一个高性能的端口,非常接近原始的POSIX版本。

我们正在将它用于金融服务应用程序,该应用程序遇到高负荷的实时推送和拉动信号器,如上所述&#34;支持&#34; Redis用于维护集线器会话状态。

因此,虽然您仍然可以做出已接受的答案,但大约3年半之后,我会考虑一些默认的ASP.NET会话管理体验的替代方案,这些方法可以通过OSS免费获得。

https://github.com/MSOpenTech/redis

http://www.codeproject.com/Articles/636730/Distributed-Caching-using-Redis

答案 2 :(得分:0)

我认为可以按照您喜欢的方式进行,但是通常使用数据库进行会话状态管理(虽然有一些缺点)可以带来很多好处,请查看我的博客以获得简单的从头开始实现 http://techblog.alkumait.net/index.php/2011/12/net-custom-session-implementation/

答案 3 :(得分:0)

我认为这对于想要在数据库中实现自定义会话实施的人来说是一个有价值的链接:http://msdn.microsoft.com/en-us/library/ms178589.aspx