ASP.NET 会话状态提供程序属性
将 ASP.NET 会话存储在 NCache 不需要编程。 NCache ASP.NET Session State Provider 是一个自定义的 SessionStateStoreProviderBase
ASP.NET 应用程序的实现。要在应用程序中配置和获取 ASP.NET 会话,需要进行以下修改。
备注
此功能也可用于 NCache Professional.
ASP.NET 会话状态先决条件
- 根据您的应用程序在您的应用程序中安装以下 NuGet 包 NCache 版本:
- 缓存必须正在运行。
修改asp.net会话状态标签
编辑您的应用程序 网页配置 文件并修改 <sessionState>
部分如下。
<configuration>
...
<sessionState cookieless="false"
regenerateExpiredSessionId="true"
mode="Custom"
customProvider="NCacheSessionProvider"
timeout="20">
<providers>
<add name="NCacheSessionProvider"
type="Alachisoft.NCache.Web.SessionState.NSessionStoreProvider"
cacheName="demoCache"
sessionAppId="demoApp"
useInProc="false"
enableLogs="false"
exceptionsEnabled="true"
writeExceptionsToEventLog="false"
AsyncSession="false"
useJsonSerialization="false"
enableLogs="false"
enableSessionLocking="true"
sessionLockingRetry="-1"
emptySessionWhenLocked="false" />
</providers>
</sessionState>
...
</configuration>
修改 Web Farms 的 MachineKey 标签
对于网络农场,添加 <machineKey>
进入下 <system.web>
部分。 需要在所有节点上以相同的方式生成 ASP.NET 会话 ID。
了解如何为网络场生成机器密钥:
为 Web 场 (IIS 7) 生成机器密钥
<machineKey validationKey ="A01D6E0D1A5D2A22E0854CA612FE5C5EC4AECF24"
decryptionKey ="ACD8EBF87C4C8937" validation ="SHA1"/>
序列化会话对象
在您开始使用之前 NCache 要存储和检索 ASP.NET Session 对象,您需要知道不能将这些对象直接存储在缓存中。 要将这些会话对象存储在缓存中,您需要首先将它们序列化。 您可以采用不同的方法来序列化会话对象。 这些方法如下:
二进制序列化
如果您有权访问应用程序的源代码,则可以使用此序列化方法。 在这种情况下,您必须将所有对象(您想要存储在缓存中的对象)标记为可序列化。
备注
但是,从 .NET 6.0 开始,此方法已过时,如果您在任何 ASP.NET 应用程序中使用二进制序列化或紧凑序列化,它们将相应地抛出异常通知用户。
NCache 紧凑序列化
如果你不能或不想使用二进制序列化,你可以使用 NCache 紧凑序列化 序列化您的会话对象。 它速度更快,只需要修改配置文件而不需要修改源代码。
此方法的唯一问题是,如果要序列化的类数量很大,则配置更改可能会很大。
JSON 序列化
如果上述任何一种序列化技术都不适合您,那么您可以选择 JSON 序列化。 此方法最好的部分是它超级快速且简单,因为它只需要您对您的 web.config中 文件,其余的工作由 NCache 在运行时自动。
你只需要设置的值 usejsonserialization
标记为 True。 默认情况下,该标志的值为 False。
获取会话数据
NCache 允许通过以下方式查看存储在集群缓存中的所有会话数据 NCache 会话状态模块。 所有会话数据都添加到指定的缓存中,作为带有 Tag 的标记缓存项: NC_ASP.net_session_data
.
要检索以前存储的会话数据,可以通过以下方式获取数据 GetByTag
API,它返回一个字典,其中填充了会话 ID 和存储在缓存中的关联会话数据。
var allSessionData = cache.SearchService.GetByTag(new Tag("NC_ASP.net_session_data"));
会话状态属性
以下是上面指定的不同键值对的描述:
委员 | 产品描述 |
---|---|
sessionAppId |
它是可选的 string 指定标识符的属性,以确保会话 ID 在多个应用程序使用相同缓存的情况下保持唯一。 应用程序 ID 应与网络场中的应用程序相同。 如果未指定应用程序 ID,则不会将任何内容与会话 ID 连接。 |
cacheName |
这是必需的 String 指定用于缓存会话的缓存名称的属性。 如果没有指定缓存名称,将会抛出配置异常。 |
enableSessionLocking |
可选 Boolean 属性。 如果设置了该标志,则 NCache 会话存储提供程序独占锁定发出多个并发请求的会话存储项。 默认值为 False。 |
sessionLockingRetry |
这是一个可选的 Integer 属性。 如果 enableSessionLocking 为 True 并且该整数不小于 0,则 NCache Session Store Provider 之后会返回一个空会话 sessionLockingRetry ,它指定获取锁的重试次数。 默认值为-1。 |
writeExceptionsToEventLog |
可选 Boolean 属性。 如果设置此标志,则缓存 API 的所有异常都会写入事件日志。 默认值为 False。 |
enableLogs |
它是可选的 Boolean 属性。 设置此标志后,存储提供商会记录所有错误信息。 日志文件创建于 %NCHOME%\log-files\SessionStoreProvider (Windows)或 /opt/ncache/log-files/SessionStoreProvider (Linux)。 默认值为 False。 |
enableDetailLogs |
可选 Boolean 属性。 设置此标志后,存储提供程序会记录所有调试信息。 日志文件创建于 %NCHOME%\log-files\SessionStoreProvider (Windows)或 /opt/ncache/log-files/SessionStoreProvider (Linux)。 默认值为 False。 |
exceptionsEnabled |
这是一个可选的 Boolean 属性,指定缓存 API 中的异常是否传播到页面输出。 将此标志设置为 True 在应用程序的开发阶段特别有用,因为异常提供了有关失败的具体原因的更多信息。 默认值为 False。 |
operationRetry |
它指定在执行操作时与服务器的连接丢失时服务器重试操作的次数。 它的默认值为 0 (零)。 |
operationRetryInterval |
它指定每次操作重试之间的时间间隔,以防与服务器的连接丢失。 它的默认值为 0 (零)。 |
usejsonserialization |
这是一个布尔属性。 如果要对 ASP.NET Session 对象使用 JSON 序列化,请将此属性的值设置为 True。 默认情况下,该属性的值为 False。 |
参见
.NET: Alachisoft.NCache.Web.会话状态 命名空间。