2010-07-09 4 views
6

서로 다른 가상 디렉터리에있는 IIS에 두 개의 동일한 응용 프로그램 설치가 있습니다. 둘 다 동일한 응용 프로그램 이름을 갖도록 몇 가지 해결 방법을 사용했습니다. 두 asp.net 웹 응용 프로그램간에 세션 ID를 공유하는 방법이 있습니까?ASP.NET의 여러 웹 응용 프로그램에서 동일한 세션 ID를 유지하는 방법

StateServer에 세션을 저장하고 있기 때문에 둘 다 동일한 세션 데이터를 가져야합니다. 그러나 응용 프로그램 a에서 응용 프로그램 b로 갈 때마다 다른 세션 ID가 만들어집니다. 로드 균형 조정 시나리오에서도 이와 같은 현상이 발생하지 않을까요? 내가 www.test.com에 갈 때, 그 요청을 서버 a로 리다이렉트하고, 다시 히트하면 서버 b로 갈 것이지만, 다른 웹 애플리케이션이기 때문에 새로운 세션 ID를 생성 할 것이다. ?

+0

그냥 데이터베이스에 던집니다. 세션의 한계를 수용하기 위해 뒤로 구부리고 있습니다. –

+0

해결 방법을 적용하지 않으면 데이터베이스에 동일한 문제가 발생합니다. DB에는 두 개의 서로 다른 응용 프로그램이 있으므로 두 개의 개별 세션이 있습니다. –

+0

당신은 나의 제안을 오해하고 있습니다. 세션 *을 모두 사용하는 대신 *, 필요한 모든 지속적인 데이터를 공통 데이터베이스에 배치하십시오. 세션과 쿠키는 응용 프로그램이 서로 격리되지 않도록 설계되어 격리가 필요합니다. 이것은 데이터베이스가 좋은 많은 것들 중 하나입니다. –

답변

7

먼저 두 앱에서 cookieName = "SOME_COOKIE_NAME_HERE"을 사용하도록 web.config의 sessionState 요소를 구성합니다.

그런 다음 URL이 동일한 TLD (최상위 도메인) (예 : app1.mydomain.com 및 app2.mydomain.com)인지 확인하고 Global.asax에서 Session_Start 이벤트를 처리하고 이 코드 :

HttpCookie cookie = new HttpCookie("SOME_COOKIE_NAME_HERE", Session.SessionID.ToString()); 
    cookie.Expires = DateTime.Now.AddMinutes(20); 
    cookie.Domain = "*.mydomain.com"; 
    cookie.HttpOnly = true; 
    Response.SetCookie(cookie); 

또한 SqlServer SessionState 모드를 사용하는 것이 좋습니다.

+0

StateServer 세션 모드에서도 작동합니까? –

+0

나는 왜 안 보이지. –

+0

흥미 롭습니다. 이 변경 사항을 적용한 후 요청 당 새 세션 ID를 얻습니다. 여기 내 Global.asax에 코드입니다 : \t 무효으로 session_start (개체 보낸 사람, EventArgs입니다 전자) \t { \t \t이 끊어진 HttpCookie 쿠키 = 새로운 끊어진 HttpCookie ("부터 SessionCookie", Session.SessionID.ToString()); \t \t cookie.Expires = DateTime.Now.AddMinutes (20); \t \t cookie.Domain = "* .keivantest.은 StateServer " \t \t \t stateConnectionString : COM"; \t \t

-1

세션 ID뿐 아니라 2 개의 응용 프로그램간에 세션 상태를 공유하려는 목표는 무엇입니까? StateServer는 SessionID뿐만 아니라 응용 프로그램 경로도 사용하여 데이터를 저장하므로 SessionID가 동일해도 데이터를 공유 할 수는 없습니다. 자신 만의 세션 모듈을 작성해야 할 수도 있습니다.

응용 프로그램 경로가 클러스터 구성원간에 동일하므로로드 균형 조정 웹 응용 프로그램에는이 문제가 없습니다.

+0

정확합니다. httpmodule을 사용하여 두 응용 프로그램의 동일한 응용 프로그램 이름을 동일한 값으로 설정합니다. –

+0

그는 응용 프로그램 이름을 얻는 데 어려움을 겪고 있다고 말했습니다. –

1

처음에는 같은 문제에 직면했습니다. 내가 한 것은 각 도메인의 jsession id를 덮어 씁니다. 내 말은, 사용자가 domain1.com에 도착하면 domain2.com의 동일한 세션 ID를 iframe에서 설정하십시오. 그 반대. 이를 통해 여러 도메인에서 동일한 세션을 유지 관리 할 수 ​​있습니다.

부하 분산 장치가있는 네트워크를 통해 여러 서버에 미치는 영향을 테스트해야합니다.

관련 문제