asp.net 站點不同應用SQLServer共享Session
阿新 • • 發佈:2020-11-21
在兩個應用的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 OUTPUTAS 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 whereAppName=@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