ASP를 사용하여 여러 응용프로그램에 걸쳐 세션을 공유합니다.NET Session State Service
저는 두 웹 애플리케이션 간에 세션을 공유하려고 하는데, 둘 다 같은 서버에서 호스팅됩니다.하나는 .net 2.0 웹 양식 응용 프로그램이고 다른 하나는 .net 3.5 MVC2 응용 프로그램입니다.
두 앱 모두 세션이 다음과 같이 설정되어 있습니다.
<sessionState
mode="StateServer"
stateConnectionString="tcpip=127.0.0.1:42424"
/>
웹 양식 응용 프로그램에서 세션 키를 MVC 응용 프로그램에 게시합니다.
protected void LinkButton1_Click(object sender, EventArgs e)
{
Session["myvariable"] = "dan";
string sessionKey = HttpContext.Current.Session.SessionID;
//Followed by some code that posts sessionKey to the other application
}
그런 다음 MVC 애플리케이션에서 이를 수신하고 다음과 같이 동일한 세션을 사용해 봅니다.
[HttpPost]
public void Recieve(string sessionKey )
{
var manager = new SessionIDManager();
bool redirected;
bool IsAdded;
manager.SaveSessionID(HttpContext.ApplicationInstance.Context, Id, out redirected, out IsAdded);
var myVar = Session["myvariable"];
}
키가 게시되고 있지만 세션이 MVC 앱에 로드되지 않는 것 같습니다. 즉 sessionKey가 null입니다.제가 하려는 일을 할 수 있을까요?
이런 식으로 했습니다.
기본적으로 두 앱 모두 sql서버에 저장된 native .net sessionState를 사용한다는 생각입니다.동일한 기계 키를 사용하고 저장된 절차를 약간만 변경하면 두 앱 모두 세션 키 및/또는 형식 인증을 공유할 수 있습니다.
두 앱 모두 웹.config에서 이와 같은 작업을 수행합니다.
<sessionState mode="SQLServer" sqlConnectionString="Data Source=.\SQLEXPRESS;User Id=test;Password=test;Application Name=AppName" />
<machineKey
validationKey="SOMEKEY"
validation="SHA1" decryption="AES"
/>
두 앱이 모두 볼 수 있는 데이터베이스 서버에 세션 상태 DB를 설정해야 합니다.
이 작업을 위한 문서: http://msdn.microsoft.com/en-us/library/ms229862(VS.80).aspx
실행해야 하는 명령: C:\Program Files(x86)\Microsoft Visual Studio 9.0\VC\bin>aspnet_regsql.exe -E -ssad --sstype p -S.\에스큐엑스프레스
저장 프로시저(TempGetApp)ID) 다음으로 조정:
@appId int OUTPUT
AS
-- start change
-- Use the application name specified in the connection for the appname if specified
-- This allows us to share session between sites just by making sure they have the
-- the same application name in the connection string.
DECLARE @connStrAppName nvarchar(50)
SET @connStrAppName = APP_NAME()
-- .NET SQLClient Data Provider is the default application name for .NET apps
IF (@connStrAppName <> '.NET SQLClient Data Provider')
SET @appName = @connStrAppName
-- end change
SET @appName = LOWER(@appName)
문제는 세션 키가 응용 프로그램의 범위를 지정하기 때문에 동일한 세션 키를 가진 두 응용 프로그램이 실제로는 별도의 세션을 갖게 된다는 것입니다.
다음 두 가지 중 하나를 수행할 수 있습니다.
두 응용 프로그램을 공통 IIS 응용 프로그램 아래에 가상 디렉터리로 놓습니다.이것은 좋은 생각이 아닌 것 같지만, 효과가 있을 것입니다.
공유하고자 하는 데이터에 대해 자신만의 세션 데이터 솔루션을 구축합니다.백엔드 데이터베이스를 공통 저장소로 사용할 수도 있습니다.
Justin의 의견을 토대로, 옵션 2를 명확히 하는 것은 프로세스 중이 아닌 세션에 대한 SQL 상태 관리 기준을 언급하는 것이 아닙니다.데이터베이스를 사용하여 두 세션의 공유 데이터를 실제로 수동으로 관리할 수 있습니다.
공통 기계 키를 사용하여 특정 사용자에 대해 두 응용 프로그램 내에서 동일한 세션 ID를 생성할 수 있습니다.또한 두 응용 프로그램의 세션을 ASP와 같은 공통 저장소에 저장할 계획도 세워야 합니다.NET State Service 또는 분산 캐시.
다른 애플리케이션 간 세션 공유 기능을 제공하는 NCache 분산 캐시를 사용할 수 있습니다.세션 상태 설정 내에서 두 응용 프로그램에 대해 동일한 Application ID 태그를 지정하면 두 응용 프로그램에 대해 동일한 Session ID가 생성된 경우 세션 개체를 공유할 수 있습니다.
언급URL : https://stackoverflow.com/questions/2868316/sharing-sessions-across-applications-using-the-asp-net-session-state-service
'programing' 카테고리의 다른 글
AbstractAnnotationConfigDispatcherServlet을 사용하는 경우이니셜라이저 및 웹어플리케이션이니셜라이저? (0) | 2023.09.07 |
---|---|
요청을 사용하여 Node.js의 이진 컨텐츠 가져오기 (0) | 2023.09.07 |
MySQL 메모리 테이블과 동등한 PostgreSQL? (0) | 2023.09.07 |
그 내용으로 디브의 키를 크게 하다. (0) | 2023.09.07 |
Eclipselink: 임시 테이블의 열 길이 및 mb4 (0) | 2023.09.07 |