ASP.NET實(shí)現(xiàn)多域名多網(wǎng)站共享Session值的方法
1、實(shí)現(xiàn)功能:可設(shè)置哪些站點(diǎn)可以共享Session值,這樣就防止別人利用這個(gè)去訪問(wèn)
要想實(shí)現(xiàn)這個(gè)功能就必須得把Session值 放入數(shù)據(jù)庫(kù)中, 所有我們先在VS命令工具下注冊(cè)一個(gè)
命名如下:aspnet_regsql.exe -S [數(shù)據(jù)庫(kù)服務(wù)地址] -E -ssadd 具體格式請(qǐng)參考 /?
添加成功后我們休要對(duì)ASP.NET生成的存儲(chǔ)過(guò)程進(jìn)行簡(jiǎn)單的修改,
打開ASP.net為我們創(chuàng)建的數(shù)據(jù)庫(kù)“ASPState” 找到存儲(chǔ)過(guò)程“TempGetAppID”
然后修改存儲(chǔ)過(guò)程如下:
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í)寫死的 你可以通過(guò)系統(tǒng)數(shù)據(jù)庫(kù)tempdb中的ASPStateTempApplications查詢到站點(diǎn)appId 記住只有當(dāng)網(wǎng)站的Seeion配置是數(shù)據(jù)庫(kù)中 而且保存過(guò)一次Session值才能查詢的到
/*
--SELECT @appId = AppId
--FROM [tempdb].dbo.ASPStateTempApplications
--WHERE AppName = @appName
以上注釋辦法為原來(lái)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è)問(wèn)題就是替換客戶端的SeeionID ,我們可以添加一個(gè)處理程序來(lái)利用SessionIDManager類來(lái)進(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 一切搞定 你去試試把
相關(guān)文章
asp.net 臨時(shí)數(shù)據(jù)保存實(shí)現(xiàn)代碼
在一個(gè)程序運(yùn)行的時(shí)候往往我們會(huì)回到上一個(gè)頁(yè)面,或者我們會(huì)需要當(dāng)時(shí)留在這個(gè)頁(yè)面的臨時(shí)數(shù)據(jù),例如,我們用百度搜索“腳本”之后我們會(huì)看到很多那啥我就不再說(shuō)了啊!然后我們返回本來(lái)頁(yè)面在文本框內(nèi)會(huì)有“腳本”的字樣,我們一下代碼段就是實(shí)現(xiàn)這個(gè)功能2012-04-04asp.net Web Service 接口大量數(shù)據(jù)傳輸解決方案
就管他叫“使用多線程分段獲取大量數(shù)據(jù)方法”吧。假定我們的需求是,通過(guò)Web Service獲取10W條訂單,我的解決方案是 分成10個(gè)線程每個(gè)線程傳輸1W條訂單分段獲取2010-04-04Asp.net程序優(yōu)化js、css實(shí)現(xiàn)合并與壓縮的方法
這篇文章主要介紹了Asp.net程序優(yōu)化js、css實(shí)現(xiàn)合并與壓縮的方法,使用第三方組件實(shí)現(xiàn)訪問(wèn)時(shí)將js與css文件壓縮并緩存在客戶端的效果,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2014-12-12.NET CORE中比較兩個(gè)文件內(nèi)容是否相同的最快方法
這篇文章主要給大家介紹了關(guān)于.NET CORE中比較兩個(gè)文件內(nèi)容是否相同的最快方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用.NET CORE具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06Asp.Net實(shí)現(xiàn)的通用分頁(yè)函數(shù)
這篇文章主要介紹了Asp.Net實(shí)現(xiàn)的通用分頁(yè)函數(shù),結(jié)合實(shí)例形勢(shì)分析了asp.net分頁(yè)函數(shù)的功能,定義及使用技巧,需要的朋友可以參考下2016-04-04Asp.net中Microsoft.Identity的IPasswordHasher加密的默認(rèn)實(shí)現(xiàn)與運(yùn)用
本文主要介紹了Microsoft.Identity的IPasswordHasher加密的默認(rèn)實(shí)現(xiàn)與運(yùn)用。具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧2017-02-02ASP.NET列出數(shù)據(jù)庫(kù)活躍鏈接的方法
這篇文章主要介紹了ASP.NET列出數(shù)據(jù)庫(kù)活躍鏈接的方法,實(shí)例分析了asp.net列出數(shù)據(jù)庫(kù)活躍鏈接的原理與實(shí)現(xiàn)技巧,需要的朋友可以參考下2015-06-06asp.net 數(shù)據(jù)庫(kù)連接類代碼(SQL)
asp.net數(shù)據(jù)庫(kù)連接類(SQL) 代碼,需要的朋友可以參考下。2010-03-03