asp.net 用sqlserver 实现session共享 (100%成功)
亲爱的朋友, 下载此文档,我想你一定跟我一样,因为session共享问题,一直苦无良策吧? 为此,我试验了很多种方法,都不能成功!后来经常不断尝试,最终发现了原因,终于解决了.
一,配置原因描述:
共享session是因为在公司开发时,WEB发布到服务器上要配置多个站点, 如: www.yd009.com news.yd009.com product.yd009.com 这几个站点上,都 有登录 信息, 都 会在主站有链接 过来.如果主站登录了,跳到这几个二级域名,也同样可以登录状态. 在做这个之前,我也在网上查找了好多资料,,几乎没有一个是完整的.很是郁闷 ,可能大家都是为了留一手.
http://www.cnblogs.com/dfsxh/archive/2009/10/09/1579579.html
http://www.cnblogs.com/yizhu2000/archive/2008/04/01/1131976.html
http://hi.baidu.com/vcty2007/blog/item/ce313460f04d474eebf8f8fb.html
===太多啦.没有一个是完整的.
二,实现配置
语言:asp.net 开发工具:VS2008 数据库sqlserver 2005
三,配置步骤
1,开始运行->cmd->cd C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727(win2003 一般是这个目录)
2,aspnet_regsql.exe -sstype c -ssadd -d 你的数据库名 -U 用户名 -P 密码 -S 数据库服务地址
3,修改里面的存储过程
1 set ANSI_NULLS ON 2 set QUOTED_IDENTIFIER ON 3 go 4 5 6 alter PROCEDURE dbo.TempGetAppID 7 @appName tAppName, 8 @appId int OUTPUT 9 AS 10 11 SET @appName = LOWER(@appName) 12 SET @appId = NULL 13 14 --查询AppName对应的AppId 15 --次处进行了修改,使每个AppId都是一样. 16 SELECT top 1 @appId = AppId 17 FROM [hnAuto].dbo.ASPStateTempApplications 18 --WHERE AppName = @appName 19 20 --如果没有查询到AppId 21 IF @appId IS NULL 22 BEGIN 23 BEGIN TRAN 24 --锁定模式查询 25 SELECT @appId = AppId 26 --SELECT top 1 @appId = AppId 27 FROM [hnAuto].dbo.ASPStateTempApplications WITH (TABLOCKX) 28 WHERE AppName = @appName 29 30 --如果没有查询到AppId 31 IF @appId IS NULL 32 BEGIN 33 --获取AppName的HashCode 34 EXEC GetHashCode @appName, @appId OUTPUT 35 36 --插入新AppId 37 INSERT [hnAuto].dbo.ASPStateTempApplications 38 VALUES 39 (@appId, @appName) 40 41 IF @@ERROR = 2627 42 BEGIN 43 DECLARE @dupApp tAppName 44 45 SELECT @dupApp = RTRIM(AppName) 46 FROM [hnAuto].dbo.ASPStateTempApplications 47 WHERE AppId = @appId 48 49 RAISERROR('SQL session state fatal error: hash-code collision between applications ''%s'' and ''%s''. Please rename the 1st application to resolve the problem.', 50 18, 1, @appName, @dupApp) 51 END 52 END 53 COMMIT 54 END 55 56 RETURN 0
以上的过程 ,你可以复制进去运行就可以了.
四,修改 web.config 在system.web 加入或修改以下项
1 <httpCookies domain="news.com" /> 2 <sessionState mode="SQLServer" sqlConnectionString="data source=[Server];initial catalog=[DataBase];user id=[UserName];password=[Password]" allowCustomSqlDatabase="true" timeout="120"/>
五,OK,你大功告成了.记得重启一下IIS ,最好把自己本机上的cookie或垃圾项清除一下,这样效果更好.
好了,我的解说完成了.