ASP.NET 中的跨应用程序会话共享:.NET 2.0 Web 表单和 .NET 3.5 MVC2 解决方案
简介
跨多个 ASP.NET 应用程序维护一致的会话数据可以简化数据管理和应用程序间通信。本文解决了一个常见的挑战:在同一服务器上的 .NET 2.0 Web Forms 应用程序和 .NET 3.5 MVC2 应用程序之间共享会话。
问题:会话密钥不一致
当使用具有相同stateConnectionString
设置的StateServer模式时,会话密钥传输成功,但MVC应用程序无法检索会话数据(导致空sessionKey
)。
解决方案:利用 SQL Server 的本机会话状态
推荐的解决方案包括配置两个应用程序以利用 SQL Server 的本机会话状态管理。
配置 web.config:
修改两个应用程序的web.config
文件如下:
<code class="language-xml"><sessionState mode="SQLServer" sqlConnectionString="..."/></code>
确保指定的 SQL Server 实例可供两个应用程序访问,并且存在必要的会话状态数据库。
调整存储过程:
调整会话状态数据库中的TempGetAppID
存储过程以从连接字符串动态检索应用程序名称。这允许具有匹配名称的应用程序共享会话:
<code class="language-sql">@appId int OUTPUT AS ... -- Dynamically obtain the application name from the connection string DECLARE @connStrAppName nvarchar(50) SET @connStrAppName = APP_NAME() ...</code>
确保机器密钥一致:
两个应用程序必须采用相同的 machineKey
设置,在各自的 web.config
文件中定义:
<code class="language-xml"><machineKey decryption="AES" validation="SHA1" validationKey="SOMEKEY"/></code>
通过实施这些修改,两个应用程序都可以无缝共享会话数据,利用相同的会话密钥并在应用程序之间保持一致的表单身份验证。
以上是如何在 .NET 2.0 Web 窗体和 .NET 3.5 MVC2 应用程序之间共享 ASP.NET 会话状态?的详细内容。更多信息请关注PHP中文网其他相关文章!