2013-07-09 1 views
0

사용자가 테스트를 실행하고 콘텐츠를 공부할 수있는 웹 사이트를 만들고 있는데, 로그인 한 사용자가 다음을 가질 수 있기를 바랍니다. 하나의 논리 세션. 따라서 현재/최신 세션 이외의 세션에서 오는 요청을 무효화하여 동일한 계정에 로그인 한 여러 브라우저 또는 컴퓨터에서 동시 사용을 본질적으로 제한합니다. 그러나 나는 asp.net 폼 인증을 사용하여이 문제에 최선을 다하는 방법에 대해서는 확신 할 수 없다.AuthCookie의 고유 ID로 사용자를 하나의 로그인 세션으로 제한하고 데이터베이스 테이블을 검사합니다.

나는 생각하고있다 :

  • 이 ActiveSessions라는 DB 테이블을 작성, 행과 : 사용자 ID를 UniqueSessionID을. 이 UniqueSessionID를 클라이언트의 암호화 된 AuthCookie에 저장하십시오.

  • 사용자가 인증되지 않고 표준 로그인 페이지/계정/로그인 등을 통해 로그인하는 경우 새 UniqueSessionID를 만들고 기존 값을 덮어 쓰는 AuthCookie 및 ActiveSessions 테이블에 각각 저장합니다. 기본 AuthCookie 폼 인증의 내용을 해독하고 복사 한 다음이 복사 된 데이터를 사용하여 새 AuthCookie를 만들고 클라이언트에 반환하기 전에 내 UniqueSessionID를 삽입해야한다고 가정합니다.

  • AuthCookie가 데이터베이스의 항목과 일치하지 않는 UniqueSessionID를 보유하거나 레코드가 해당 사용자에 대해 누락 된 요청이 들어오는 경우 세션을 무효화하고 브라우저를 로그인 페이지로 리디렉션하거나 kill합니다. Ajax 요청에 대한 세션 오류 및 발급 오류.

  • 것은 사용자 LastActivityDate가 일정 시간 길이를 초과하는 경우에 따라 ActiveSessions 테이블의 레코드를 정리 예정된 서비스의 일종 만들기 등

이상적으로는 바라고 인증이 약간의 훅을 제공 형성 여기서 내가 할 수있는 이 논리를 붙이면 컨트롤러/메소드 등의 속성을 사용하지 않아도됩니다.

또한 세션 상태와 쿠키를 완전히 사용하지 않는 것이 좋습니다.

답변

0

매우 비슷한 요구 사항이 있습니다. 필자의 상황은 사용자 ID가 한 번에 하나의 장치 (양식 인증, AD 방식이 아님)로만 로그인했는지 확인해야하는 상황이었습니다. 사용자 ID가 기존 장치에 계속 로그인되어있는 동안 다른 장치에 로그인하려고 시도하면 사용자는 기존 장치에서 새 장치에 로그인 할 수있게하면서 세션을 종료합니다. 내가 만든 구현은 완벽하게 작동하고 지금까지는 디자인에 결함이 발견되지 않았습니다. 스택 오버플로에 대한 내 원래 게시물의 솔루션을 작성했습니다 :

When the same user ID is trying to log in on multiple devices, how do I kill the session on the other device?