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

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

先记录下过:

1。修改配置文件

< system .web >
    
<!--  让其在跨站点访问时,使SESSION能共用  -->
    
< httpCookies  domain ="CSDN.Net"   />
    
<!--  设置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. '
                            
18 1 @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。使用虚拟目录
     把多个站点放到同一个站点中。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值