跨域名(跨服务器)共享SESSION ASP.NET 解决方案

首先,我说的跨域是指:

a.myDomain.com

b.myDomain.com

这样的域。

如果你想

http://www.abc.com/

http://www.bca.com/

这样共享SESSION这里暂不讨论(可以编程实现).

第一步:使你的ASP.NET程序使用SQL保存SESSION状态。 

   实施方案:http://www.cnblogs.com/zhangziqiu/archive/2009/03/26/sessionserver.html 《Session服务器配置指南与使用经验

 

第二步:在你的ASP.NET里加入cookie代码

HttpCookie ck = Request.Cookie[ " ASP.NET_SessionId " ];
ck.Domain
= " myDomain.com " ;
Request.Cookies.Set(ck);

 

 

COOKIE是有域的限制的,如果不加域的话,那就必须在当前全域名下使用COOKIE。总之这个在这篇文章中不重要。想深入了解的朋友,自行GOOGLE吧。

这里简单说明一下, session的传递是通过COOKIE里的ASP.NET_SessionId提供的信息,服务器再根据这个SESSIONID读取数据。

 

第三步:修改ASPState库中的TempGetAppID存数过程

 

代码
set  ANSI_NULLS  ON
set  QUOTED_IDENTIFIER  ON
go
    
ALTER   PROCEDURE   [ dbo ] . [ TempGetAppID ]
    
@appName     tAppName,
    
@appId        int  OUTPUT
    
AS
    
SET   @appName   =   ' myApplication '   --  LOWER(@appName)这里修改一下你项目的名字,这只是最笨的方法,仅能用一个项目了。但我相信聪明的你一定有其它解决方法的。
     SET   @appId   =   NULL

    
SELECT   @appId   =  AppId
    
FROM   [ ASPState ] .dbo.ASPStateTempApplications
    
WHERE  AppName  =   @appName

    
IF   @appId   IS   NULL   BEGIN
        
BEGIN   TRAN         

        
SELECT   @appId   =  AppId
        
FROM   [ ASPState ] .dbo.ASPStateTempApplications  WITH  (TABLOCKX)
        
WHERE  AppName  =   @appName
        
        
IF   @appId   IS   NULL
        
BEGIN
            
EXEC  GetHashCode  @appName @appId  OUTPUT
            
            
INSERT   [ ASPState ] .dbo.ASPStateTempApplications
            
VALUES
            (
@appId @appName )
            
            
IF   @@ERROR   =   2627  
            
BEGIN
                
DECLARE   @dupApp  tAppName
            
                
SELECT   @dupApp   =   RTRIM (AppName)
                
FROM   [ ASPState ] .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   

 

 

本砖家写的这份文档基于属于“傻瓜包”,但我相信可以解决你的问题的。至于一些原理性的东西,再写个四五页也是写不完的。

各位先用吧,用的多了就知道其中的奥秘了。

 

欢迎各位砖专拍!

:D

2010年7月22日16:16:47

你可能感兴趣的:(asp.net)