2011-08-08 5 views
6

ASP .NET의 세션 관리에 대한 질문이 있습니다. IIS (InProc, StateServer 및 SQL Server)의 3 가지 옵션을 살펴 보았으며 여러 서버 및 여러 웹 응용 프로그램에서 세션 지속성을 배포하는 데 문제가 있습니다. 동일한 도메인의 하위 도메인과 각 도메인의 여러 웹 응용 프로그램에서 세션을 관리하는 데 사용할 수있는 다른 옵션이 있습니까?ASP .NET의 세션 관리

예를 들어 말씀 드리겠습니다. 사이트 www.thisismysite.com.au를 상상해보십시오. 로그인하면 login.thisismysite.com.au로 이동합니다. 사이트를 탐색했지만 www.thisismysite.com.au/MyWebApp/로 이동합니다. 내가 달성하고자하는 것은 세 가지 링크 모두에서 세션이 지속되도록하는 것입니다. 나는 Groat SessionFarm을 할 수있는 써드 파티 도구를 알고 있지만 거기에 다른 사람들이 있는지 궁금해하고 있습니까? 또한 SSL/비 SSL이 혼합되어있어 차이가 나는 경우

참고 : 신원에 대해 걱정할 필요가 없으며 Windows Identity Foundation (기타 등등)을 구현하고 3 곳 모두에서 소유권 주장을 보낼 수 있습니다. 나는 세션 지속 이후입니다.

감사 힙, 리

편집 : 나는 우리가 우리의 목적을 위해 사용자 정의 할 수있는 코드의 타사 조각으로가는 끝났다. 완벽하게 작동하며 소스 코드를 구매할 때 필요에 따라 업데이트 할 수 있습니다.

답변

0

당신이 원했던 것과 같은 사운드는 분산 캐싱입니까? 나는이 지역에 약간 새로운 해요,하지만 내 현재의 MVC/ASP에서 세션 상태에 대한 마이크로 소프트 애저의 AppFabric 캐싱을 사용하고 있어요 Distributed Cache/Session Solution for ASP.NET Web App

-

이 게시물을보고 몇 가지 옵션을 제공 할 수 있습니다. Azure 웹 응용 프로그램은 본질적으로 세션 상태에 대한 좋은 옵션을 제공하지 않기 때문에 .NET 프로젝트.

위의 링크의 링크가 Azure의 AppFabric 캐싱과 유사하고 세션 상태도 처리 할 수 ​​있다고 생각합니다. 나는 그들 중 누구와도 일하지 않았으므로 신뢰성을 보장 할 수는 없다. 이번 주말 내 앱에서이 부분을 시작하는 것뿐입니다.

그렉

+0

내가 그것이 내가 다른 웹 응용 프로그램 (하위 도메인 또는 하나 이상의 공유 세션을 질수 있다는 것을 의미은 StateServer의 더 큰 버전처럼 작동 알 수 있습니다 하위 응용 프로그램). 그것은 여러 서버를 통해 동일한 사이트/응용 프로그램에서 작동합니다. – lkoutzas

0

하나의 옵션은 SQL 서버를 통해 세션 상태를 관리하는 것입니다, 또는 NCache는 여러 서버 상태를 관리 할 수처럼 당신이 뭔가에 볼 수 있습니다.

+0

예,하지만 여러 응용 프로그램 (하위 웹 응용 프로그램 또는 하위 도메인)에서는 작동하지 않습니다. – lkoutzas

0

상태 서버 또는 SQL 서버가 작동해야합니다. 최소한 http의 경우. Https 요청이 동일한 IP에서 끝나야 할 수도 있습니다.

세션을 유지 관리하는 하드웨어 부하 분산 장치/스위치를 사용할 수도 있습니다. 그들은 사용자의 초기 요청을 서버로 보내고 그 사용자의 다음 요청은 항상 동일한 서버로 전송됩니다. (또는 그들이 시도)

그것은 하나의 웹 응용 프로그램에 대한 세션을 공유하기위한 것이지만 내 직업에서 내가하는 일은 고전적인 ASP 세션을 사용하는 것입니다 (레거시 지원을 위해, 그러나 asp.net도 유효합니다)), 사용자가 로그인하면 asp에서 만들어지고 sessions.asp (이름은 중요하지 않음)라는 파일에서 읽습니다. 웹 요청시 .net에서 호출 할 때 값을 반환합니다.

예 : sessions.asp? session_name = username은 로컬 .net 응용 프로그램에서 호출되어 "John"에 응답하므로 "John"은 세션 [ "session_name"] 및 sessions.asp (또는 aspx, php 또는 원하는대로) 응답에 텍스트를 씁니다.

분명히 설명되어 있는지 확실하지 않습니다 ... 더럽고 쉬운 방법입니다. 우리 회사에서는 약 300 명의 동시 사용자가 세션 당 1 회의 세션을 거치게되어 꽤 잘 작동하는 것 같습니다. 희망이 도움이됩니다. ;-)

-1

세션 대신 캐시를 사용하여 여러 웹 응용 프로그램을 처리하는 간단한 방법 중 하나입니다.

이 경우 캐시 키는 사용자 ID와 사용자 위치 IP의 조합입니다. 당신이 캐시 기간이 인식해야하므로 캐시는 기본적으로 만료되지 않습니다 때문에 로그 아웃시

int timeout=20; 
string key= userid+System.Web.HttpContext.CurrentRequest.ServerVariables("REMOTE_ADDR"); 

//Set 
Cache.Insert(key, value, null, DateTime.Now.AddMinutes(timeout), Cache.NoSlidingExpiration);  

//Get 
var value=Cache[key]; 

은 무엇을 위해 잘 작동합니다 캐시를 ​​SQL Server의

Cache.Remove(key); 
1

주 서버 나 스토리지를 제거 깜빡하지 않는다 여러 개의 응용 프로그램에 걸쳐서도 작업을하려고하지만 모든 응용 프로그램이 동일한 MachineKey를 가져야한다는 것을 기억해야합니다.

ASPNET-load-balancing-and-ASPNET-state-server

HTH

나는 푸른의 AppFabric에서와에서보고