2010-03-27 3 views
2

나는 ASP.NET에서 개발 된 웹 응용 프로그램 프로젝트에 한 번 참여했습니다. 각 로그온 사용자에 대해 RAM (여기에는 UserSessionObject)을 만들어 RAM에 저장합니다. 지정된 사용자의 각 HTTP 요청에 대해 일치하는 UserSessoinObject 인스턴스는 사용자 상태 정보 및 데이터베이스 연결을 방문하는 데 사용됩니다. 따라서 UserSessionObject이 매우 중요합니다.웹 응용 프로그램의 로그온 사용자 정보를 저장하는 가장 좋은 방법은 무엇입니까?

이 디자인은 뒷부분의 몇 가지 문제 제공 :이 UserSessionObject가 ASP.NET 메모리 공간에 캐시되어 있기 때문에

1), 우리는로드 밸런서가 끈적 연결로 config (설정) 할 수 있습니다. 즉, 단일 세션의 HTTP 요청은 항상 뒤에있는 하나의 웹 서버로 전송됩니다. 이것은 확장 성 및 유지 보수성을 제한합니다.

2)이 UserSessionObject은 모든 HTTP 요청에서 액세스됩니다. 일관성을 유지하기 위해 UserSessionObject에 대한 단독 잠금이 있습니다. 한 번에 하나의 HTTP 요청 만 처리 할 수 ​​있습니다. 잠금을 먼저 얻어야하기 때문입니다. 성능 및 응답 시간이 영향을받습니다.

이제 이러한 로그온 사용자의 경우를 처리 할 수있는 더 나은 디자인이 있는지 궁금합니다. Sharing-Nothing-Architecture가 도움이되는 것처럼 보입니다. 즉, 매번 긴 사용자 정보가 데이터베이스에서 검색됩니다. 나는 그것이 공연을 해칠 까봐 두렵다.

긴 사용자 웹 앱을위한 디자인 패턴이 있습니까? 감사합니다. .

답변

2

데이터베이스에 세션 상태를 저장하고 그 앞에 memcached를 넣습니다.

1

StackOverflow 및 다른 곳에서 논의 된 한 가지 방법은 서명 된 쿠키입니다. 신뢰할 수없는 정보가있는 쿠키와 서버 만 만들 수있는 방식으로 만들어진 해시가 정보를 가지고 있으므로 정보가 유효하다는 것을 알고 있습니다. 이는 사용자 이름과 같이 보안 수준이 높지 않은 정보를 저장할 수있는 확장 가능한 방법입니다. 서명 된 쿠키가 모든 기준을 충족하는 한 사용자가 로그인했음을 확인하기 위해 공유 리소스에 액세스 할 필요가 없습니다 (쿠키를 도용하여 장기적인 문제가 발생하지 않도록 날짜 스탬프가 있어야합니다. 또한 사용자가 인증하지 않았 음을 추적하므로 일반 로그인 프로세스를 거치지 않고 더 안전한 정보에 액세스 할 수 없어야합니다.

StackOverflow: Tips on signed cookies instead of sessions

관련 문제