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

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  一切搞定 你去试试把

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值