2013-02-11 2 views
2

현재 MVC를 기반으로하는 새 웹 사이트를 설계하고 있으며 상태를 관리하는 올바른 방법이 무엇인지 궁금합니다.
이 상태는 사용자 ID와 사용자 정보의 일부 구조체를 포함해야하고, 그가 (HTTP를 통해 요청)Asp.Net MVC 웹 사이트의 상태 유지

중요한 기준에 기록하는 동안에 사용자의 전체 세션 동안 유지해야한다 :
1) 지원 확장
2) 성능

쉬운 방법은 세션 개체를 사용하는 것이지만 확장 성을 지원하지는 않습니다. 세션 중에 다른 요청이 다른 IIS 서버를 통과하면 세션이 유지되지 않습니다. 같은 시스템을 통해 단일 세션의 모든 요청을 라우트하는로드 균형 조정 도구에 대해서는 들어 봤지만, 의존하지 않는 것이 좋을지는 모르겠다. (그렇지 않습니까?)

나는 RAM DB (Cassandra for Linux 또는 Redis for Windows)를 실행중인 특수 상태 서버에 상태 데이터를 보관하고 있습니다. 그러나 개발의이 단계에서 나는 과잉이라고 생각합니다.

다른 의견이 있으십니까? 저는 지금 당장 간단하게 시작하고 싶지만, 앞으로 더 발전된 솔루션을 준비해 두십시오.

모범 사례 또는 코드/디자인 제안을 환영합니다.

감사합니다.
Edi.

답변

3

(1) 사용 Sql Server 세션 상태

(2) 사용을 저장하는 Memcached as a Session State Provider

(3) 요리까지 외부 캐싱 공급자에 캐싱을 사용하여 자신의 솔루션을 : 조사 ServiceStack Caching Framework과 같은 것을 사용합니다. 이것을 사용하면 Redis, Memcached, Azure 또는 AWS를 사용하여 캐싱을 처리 할 수 ​​있습니다.

다음으로 특정 항목에 대한 키 생성을 처리하는 KeyFactory를 만듭니다. 항목 키는 사용자가 항상 FormsAuthentication UserId (사용자가 FormsAuthentication을 사용한다고 가정)에서 가져온 다음 사용자의 세션 데이터를 캐시에 저장합니다.이 방법을 사용하면 Session 대신 캐싱을 사용하고 캐시를 여러 서버에서 공유 할 수 있습니다.

참고 : 새 세션을 시작할 때마다 사용자 데이터를 지우는 것과 관련하여 다른 접근 방법을 사용할 수 있습니다.잠재적 인 접근 방법은 다음과 같습니다

  • 가 cacheKey에서 사용자의 세션 시작 날짜 시간을 포함, 그들은 더 이상
  • 지우기 밖으로 사용자에 대한 모든 잠재적 인 항목들이 새로운 세션을 시작할 때 신선한 없을 때 항목을 자동-만료
+0

ASP.NET은 팜의 여러 서버에서 구성 할 수있는 상태 서버 (Windows 서비스)와 함께 제공됩니다. – GalacticCowboy

+0

위의 ServiceStack은 훌륭한 솔루션입니다. 간단 해 보이고 InMemoryCache를 사용하여 세션을 대체 할 수 있습니다. – Edi

+1

Btw, 로그인 당 세션 식별자를 저장하는 세션 쿠키가 있습니다. 그래서 나는 Session 객체를 통해 그것을 검색 할 수 있고 그것을 내 custom 캐싱 제공자의 식별자로 사용할 수있다. – Edi

0

사용자가 보유하고있는 정보의 유형 및 양에 따라 .NET 4.5를 사용하는 경우 claims을 사용하여 사용자에 대한 정보를 저장하고자 할 수 있습니다. .NET 4.5에서 모든 주체는 ClaimsPrincipal에서 상속받습니다. ClaimsPrincipal은 이미 사용자 이름, 역할 및 기타 정보를 저장하기 위해 클레임을 사용합니다. 자신 만의 service to transform claims을 만들 수 있습니다. 그러면 주 사용자에게 추가 정보를 추가 할 수 있습니다.

+0

좋은 해결책 인 것처럼 보이지만 지금은 소유권 주장을 사용하고 싶지 않습니다. 감사! – Edi

관련 문제