Skip Navigation Links
技术文档
·网站建设
·软件使用
·图形设计
·程序开发
·网络应用
·电脑技巧
 
公司介绍
·公司简介
·索仕SRCOS网络应用平台
·索仕网站管理系统
·影视广告制作
·联系我们
 
 

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

7/22/2010 6:32:54 PM

 

首先,我说的跨域是指:

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存数过程

 

跨域名(跨服务器)共享SESSION ASP.NET 解决方案代码
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.'
                            
181@appName@dupApp)
            
END
        END

        COMMIT
    END

    RETURN 0  
作者:ziqiu.zhang 来源:博客园
 
 
 
昆明索仕科技开发有限公司 版权所有 Copyright© 2002-2010 Kunming Source Technology Exploitive Co.,LTD. All Rights Reserved.
电话:0871-5627877 业务QQ:163871 联系我们
本站基于:索仕网站信息管理系统建设 版本 2.0.4325