欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

ASP.NET实现多域名多网站共享Session值的方法

程序员文章站 2024-03-07 16:46:33
asp.net实现多域名多网站共享session值 1、实现功能:可设置哪些站点可以共享session值,这样就防止别人利用这个去访问   要想实现这个功能就必须得把ses...
asp.net实现多域名多网站共享session值
1、实现功能:可设置哪些站点可以共享session值,这样就防止别人利用这个去访问
  要想实现这个功能就必须得把session值 放入数据库中, 所有我们先在vs命令工具下注册一个
命名如下:aspnet_regsql.exe -s [数据库服务地址] -e -ssadd 具体格式请参考 /?
添加成功后我们休要对asp.net生成的存储过程进行简单的修改,
打开asp.net为我们创建的数据库“aspstate” 找到存储过程“tempgetappid”
然后修改存储过程如下:
复制代码 代码如下:

use [aspstate]
go
/****** object: storedprocedure [dbo].[tempgetappid] script date: 11/21/2011 16:15:27 ******/
set ansi_nulls on
go
set quoted_identifier off
go
alter procedure [dbo].[tempgetappid]
@appname tappname,
@appid int output
as
set @appname = lower(@appname)
set @appid = null
set @appid=640732509 --这个是我自己测试时写死的 你可以通过系统数据库tempdb中的aspstatetempapplications查询到站点appid 记住只有当网站的seeion配置是数据库中 而且保存过一次session值才能查询的到
/*
--select @appid = appid
--from [tempdb].dbo.aspstatetempapplications
--where appname = @appname
以上注释办法为原来asp.net 自动生成的
*/
if @appid is null begin
begin tran
select @appid = appid
from [tempdb].dbo.aspstatetempapplications with (tablockx)
where appname = @appname
if @appid is null
begin
exec gethashcode @appname, @appid output
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

这个就可以共享了,但我们还得解决一个问题就是替换客户端的seeionid ,我们可以添加一个处理程序来利用sessionidmanager类来进行处理,
实例我就不写了,我值写个替换的方法
复制代码 代码如下:

sessionidmanager sessionid = new sessionidmanager();
bool a;
bool b;
sessionid.savesessionid(this.context, "这里是seeionid", out a, out b);

最后修改配置文件
在system.web节点下添加 <sessionstate mode="sqlserver" sqlconnectionstring="data source=数据连接;user id=sa; password=123456;" ></sessionstate>
ok 一切搞定 你去试试把