ASP.NET實(shí)現(xiàn)多域名多網(wǎng)站共享Session值的方法
更新時(shí)間:2011年11月21日 18:41:12 作者:
實(shí)現(xiàn)功能:可設(shè)置哪些站點(diǎn)可以共享Session值,這樣就防止別人利用這個(gè)去訪問,要想實(shí)現(xiàn)這個(gè)功能就必須得把Session值 放入數(shù)據(jù)庫中, 所有我們先在VS命令工具下注冊(cè)一個(gè)
ASP.NET實(shí)現(xiàn)多域名多網(wǎng)站共享Session值
1、實(shí)現(xiàn)功能:可設(shè)置哪些站點(diǎn)可以共享Session值,這樣就防止別人利用這個(gè)去訪問
要想實(shí)現(xiàn)這個(gè)功能就必須得把Session值 放入數(shù)據(jù)庫中, 所有我們先在VS命令工具下注冊(cè)一個(gè)
命名如下:aspnet_regsql.exe -S [數(shù)據(jù)庫服務(wù)地址] -E -ssadd 具體格式請(qǐng)參考 /?
添加成功后我們休要對(duì)ASP.NET生成的存儲(chǔ)過程進(jìn)行簡(jiǎn)單的修改,
打開ASP.net為我們創(chuàng)建的數(shù)據(jù)庫“ASPState” 找到存儲(chǔ)過程“TempGetAppID”
然后修改存儲(chǔ)過程如下:
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 --這個(gè)是我自己測(cè)試時(shí)寫死的 你可以通過系統(tǒng)數(shù)據(jù)庫tempdb中的ASPStateTempApplications查詢到站點(diǎn)appId 記住只有當(dāng)網(wǎng)站的Seeion配置是數(shù)據(jù)庫中 而且保存過一次Session值才能查詢的到
/*
--SELECT @appId = AppId
--FROM [tempdb].dbo.ASPStateTempApplications
--WHERE AppName = @appName
以上注釋辦法為原來ASP.net 自動(dòng)生成的
*/
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
這個(gè)就可以共享了,但我們還得解決一個(gè)問題就是替換客戶端的SeeionID ,我們可以添加一個(gè)處理程序來利用SessionIDManager類來進(jìn)行處理,
實(shí)例我就不寫了,我值寫個(gè)替換的方法
SessionIDManager sessionid = new SessionIDManager();
bool a;
bool b;
sessionid.SaveSessionID(this.Context, "這里是SeeionID", out a, out b);
最后修改配置文件
在System.Web節(jié)點(diǎn)下添加 <sessionState mode="SQLServer" sqlConnectionString="data source=數(shù)據(jù)連接;user id=sa; password=123456;" ></sessionState>
ok 一切搞定 你去試試把
1、實(shí)現(xiàn)功能:可設(shè)置哪些站點(diǎn)可以共享Session值,這樣就防止別人利用這個(gè)去訪問
要想實(shí)現(xiàn)這個(gè)功能就必須得把Session值 放入數(shù)據(jù)庫中, 所有我們先在VS命令工具下注冊(cè)一個(gè)
命名如下:aspnet_regsql.exe -S [數(shù)據(jù)庫服務(wù)地址] -E -ssadd 具體格式請(qǐng)參考 /?
添加成功后我們休要對(duì)ASP.NET生成的存儲(chǔ)過程進(jìn)行簡(jiǎn)單的修改,
打開ASP.net為我們創(chuàng)建的數(shù)據(jù)庫“ASPState” 找到存儲(chǔ)過程“TempGetAppID”
然后修改存儲(chǔ)過程如下:
復(fù)制代碼 代碼如下:
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 --這個(gè)是我自己測(cè)試時(shí)寫死的 你可以通過系統(tǒng)數(shù)據(jù)庫tempdb中的ASPStateTempApplications查詢到站點(diǎn)appId 記住只有當(dāng)網(wǎng)站的Seeion配置是數(shù)據(jù)庫中 而且保存過一次Session值才能查詢的到
/*
--SELECT @appId = AppId
--FROM [tempdb].dbo.ASPStateTempApplications
--WHERE AppName = @appName
以上注釋辦法為原來ASP.net 自動(dòng)生成的
*/
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
這個(gè)就可以共享了,但我們還得解決一個(gè)問題就是替換客戶端的SeeionID ,我們可以添加一個(gè)處理程序來利用SessionIDManager類來進(jìn)行處理,
實(shí)例我就不寫了,我值寫個(gè)替換的方法
復(fù)制代碼 代碼如下:
SessionIDManager sessionid = new SessionIDManager();
bool a;
bool b;
sessionid.SaveSessionID(this.Context, "這里是SeeionID", out a, out b);
最后修改配置文件
在System.Web節(jié)點(diǎn)下添加 <sessionState mode="SQLServer" sqlConnectionString="data source=數(shù)據(jù)連接;user id=sa; password=123456;" ></sessionState>
ok 一切搞定 你去試試把
相關(guān)文章
asp.net 按指定模板導(dǎo)出word,pdf實(shí)例代碼
這篇文章介紹了asp.net 按指定模板導(dǎo)出word,pdf實(shí)例代碼,有需要的朋友可以參考一下2013-09-09
IP地址與整數(shù)之間的轉(zhuǎn)換實(shí)現(xiàn)代碼(asp.net)
把這個(gè)整數(shù)轉(zhuǎn)換成一個(gè)32位二進(jìn)制數(shù)。從左到右,每8位進(jìn)行一下分割,得到4段8位的二進(jìn)制數(shù),把這些二進(jìn)制數(shù)轉(zhuǎn)換成整數(shù)然后加上”?!本褪沁@個(gè)ip地址了2012-09-09
Asp.net之TextBox只允許輸入數(shù)字的方法總結(jié)
Asp.net之TextBox只允許輸入數(shù)字的方法總結(jié),需要的朋友可以參考一下2013-02-02
運(yùn)行page頁面時(shí)的事件執(zhí)行順序及頁面的回發(fā)與否深度了解
page頁面時(shí)的事件執(zhí)行順序的了解對(duì)于一些.net開發(fā)者起到者尤關(guān)重要的作用;頁面的回發(fā)與否會(huì)涉及到某些事件執(zhí)行與不執(zhí)行,在本文中會(huì)詳細(xì)介紹,感興趣的朋友可以了解下2013-01-01
ASP.NET文件上傳Upload的實(shí)現(xiàn)方法
這篇文章主要為大家詳細(xì)介紹了ASP.NET文件上傳的實(shí)現(xiàn)方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-11-11
.NET微信公眾號(hào)開發(fā)之準(zhǔn)備工作
本文是.NET微信公眾號(hào)開發(fā)系列文章的第一篇,主要給大家簡(jiǎn)單介紹下微信公眾號(hào)的一些操作,有需要的小伙伴可以參考下。2015-07-07
asp.net實(shí)現(xiàn)中英文多域名檢測(cè)的方法
這篇文章主要介紹了asp.net實(shí)現(xiàn)中英文多域名檢測(cè)的方法,涉及asp.net針對(duì)URL中域名的解析及字符串操作相關(guān)技巧,需要的朋友可以參考下2016-08-08

