这个问题通常是由于Session在前台站点之间进行了负载均衡而引起的。解决方案是使用Redis或SQL Server State服务来管理会话。这是一些示例代码:
使用Redis:
将以下代码添加到Global.asax.cs文件中的Application_Start方法中:
var redisConnectionString = ConfigurationManager.ConnectionStrings["RedisCache"].ConnectionString; GlobalConfiguration.Configuration.UseRedisSessionStateStore(redisConnectionString);
在Web.config中添加以下配置:
使用SQL Server State:
在Web.config中添加以下配置:
确保在数据库中创建了用于存储会话的表,可以使用以下脚本进行创建:
CREATE TABLE [dbo].[Session] ( [SessionId] nvarchar(88) NOT NULL, [ApplicationName] nvarchar(255) NOT NULL, [Created] datetime NOT NULL, [Expires] datetime NOT NULL, [LockDate] datetime NOT NULL, [LockId] int NOT NULL, [Timeout] int NOT NULL, [Locked] bit NOT NULL, [SessionItemShort] nvarchar(MAX) NULL, [SessionItemLong] image NULL, CONSTRAINT [PK_SessionId] PRIMARY KEY CLUSTERED ([SessionId] ASC) );
通过使用Redis或SQL Server State,可以确保会话状态在前台站点之间进行负载平衡时仍然可用并返回正确的值。