首先,我说的跨域是指:
a.myDomain.com
b.myDomain.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);
ck.Domain = " myDomain.com " ;
Request.Cookies.Set(ck);
COOKIE是有域的限制的,如果不加域的话,那就必须在当前全域名下使用COOKIE。总之这个在这篇文章中不重要。想深入了解的朋友,自行GOOGLE吧。
这里简单说明一下, session的传递是通过COOKIE里的ASP.NET_SessionId提供的信息,服务器再根据这个SESSIONID读取数据。
第三步:修改ASPState库中的TempGetAppID存数过程
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![ExpandedBlockStart.gif](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
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
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