1. 程式人生 > 實用技巧 >asp.net 站點不同應用SQLServer共享Session

asp.net 站點不同應用SQLServer共享Session

在兩個應用的web.config 中 system.web 節點 設定使用SQLServer儲存Session

1 <sessionState mode="SQLServer" cookieless="false" timeout="1000" sqlConnectionString="Data Source=伺服器IP;Persist Security Info=True;User ID=sa;password=123456"/>

然後到資料庫伺服器中 開啟ASPState 資料庫

執行下面的語句

USE [ASPState]
GO
/****** Object:  StoredProcedure [dbo].[TempGetAppID]    Script Date: 11/21/2020 10:19:18 *****
*/ /* Session 共享方案 在IIS中找到站點的ID 然後在 tempdb.dbo.ASPStateTempApplications 表中找到站點的 appName 以及它的父級站點 將查詢到的 appName 賦值給下面的 @appPMame 這樣就可以在這個站點下的所有 子應用都共享Session */ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER OFF GO ALTER PROCEDURE [dbo].[TempGetAppID] @appName tAppName, @appId int OUTPUT
AS declare @appPMame varchar(100)='/lm/w3svc/90/root' --站點父級APPName SET @appName = LOWER(@appName) SET @appId = NULL --if @appName='/lm/w3svc/90/root/name' --具體子應用程式共享 if CHARINDEX(@appPMame, @appName )>0 --所有子應用程式共享 begin select @appId= appid FROM [tempdb].dbo.ASPStateTempApplications where
AppName=@appPMame end if @appId is null begin SELECT top 1 @appId = AppId FROM [tempdb].dbo.ASPStateTempApplications WHERE AppName = @appName end IF @appId IS NULL BEGIN BEGIN TRAN SELECT top 1 @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

執行成功後,建議重啟資料庫與IIS,清空一下Session