Asp.net中SqlServer模式Session的多站点共享会话状态

本文介绍了一种在Web应用与BBS系统间实现会话状态共享的方法,包括修改配置文件设置、调整ASPState的TempGetAppID存储过程等步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天在为 Web 与 BBS站点间保持会话状态一致费了不小时间。

先记录下过:

1。修改配置文件

<system.web>
    
<!-- 让其在跨站点访问时,使SESSION能共用 -->
    
<httpCookies domain="youkuaiyun.com" />
    
<!-- 设置Session模式为SQLServer -->
    
<sessionState mode="SQLServer" sqlConnectionString="Data Source=127.0.0.1;User ID=ASPState;Password=ASPState;" timeout="60" />
</system.web>

2。修改 ASPState的TempGetAppID存储过程,让不同的站点保持同一个AppId。

因为实在找不到可以自定义AppName的方法,只有出此下策了。

/*

    获取AppId
    
    修改过程,使其只生成一个AppId

*/

CREATE PROCEDURE dbo.TempGetAppID
@appName    tAppName,
@appId      int OUTPUT
AS

SET @appName = LOWER(@appName)
SET @appId = NULL

--查询AppName对应的AppId
--
次处进行了修改,使每个AppId都是一样.
SELECT top 1 @appId = AppId
FROM [tempdb].dbo.ASPStateTempApplications
--WHERE AppName = @appName

--如果没有查询到AppId
IF @appId IS NULL
BEGIN
    
BEGIN TRAN
        
--锁定模式查询
        SELECT @appId = AppId
        
--SELECT top 1 @appId = AppId
        FROM [tempdb].dbo.ASPStateTempApplications WITH (TABLOCKX)
        
WHERE AppName = @appName
        
        
--如果没有查询到AppId
        IF @appId IS NULL
        
BEGIN
            
--获取AppName的HashCode
            EXEC GetHashCode @appName@appId OUTPUT
            
            
--插入新AppId
            INSERT [tempdb].dbo.ASPStateTempApplications
            
VALUES
            (
@appId@appName)
            
            
IF @@ERROR = 2627 
            
BEGIN
                
DECLARE @dupApp tAppName
            
                
SELECT @dupApp = RTRIM(AppName)
                
FROM [tempdb].dbo.ASPStateTempApplications 
                
WHERE AppId = @appId
                
                
RAISERROR('SQL session state fatal error: hash-code collision between applications ''%s'' and ''%s''. Please rename the 1st application to resolve the problem.'
                            
181@appName@dupApp)
            
END
        
END
    
COMMIT
END

RETURN 0
GO

 

网上有很多方式,但都不是我的环境所需要的

1。修改站点的IIS元数据
     IIS站点有不同的Id(/LM/W3SVC/1009009583/Root,ID是1009009583,一般通常是1),此方法适合多服务器间的站点集群(同一台服务器上把站点ID修改为相同为出现站点错乱)。
     有关解决服务器之间应用程序路径不同的问题的步骤信息,请参见位于 http://support.microsoft.com/default.aspx?ln=zh-cn 上的 Microsoft 知识库中的文章 325056“PRB: Session State Is Lost in Web Farm If You Use SqlServer or StateServer Session Mode”(PRB:如果使用 SqlServer 或 StateServer 会话模式则会在网络场中丢失会话状态)。


2。使用虚拟目录
     把多个站点放到同一个站点中。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值