ASP.NETはマルチドメイン名マルチサイト共有Session値を実現する方法

2400 ワード

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);

プロファイルの最終変更
システムでWebノードの下に追加
OKやってみろ