2014-05-23 3 views
2

동시에 로그인 할 수있는 사용자 계정 만 허용하려고합니다.동시 로그인 제한 - ASP.NET ID

예. 사용자가 컴퓨터의 브라우저를 통해 로그인하면 이미 로그인되어있는 것처럼 휴대 전화에서 동시에 로그인 할 수 없습니다.

사용자 등록 정보에 bool 등록 정보를 추가 할 수 있습니다. 로그인하고 로그 아웃합니다.

그러나 인증 쿠키에서 SlidingExpiration을 사용하고 있으므로 쿠키가 만료되면 내 사용자 속성이 업데이트되어 현재 로그 아웃되었다는 내용이 업데이트되지 않습니다.

ExpireTimeSpan = <time period>, 
SlidingExpiration = true, 

동시 로그인을 제한하는 더 좋은 방법이 있습니까?

감사합니다.

+0

당신은'Session_End' 방법에'Global.asax'이 논리를 추가하려고 (대신 데이터베이스에이를 저장) 할 수 있습니다. –

+0

간단하지만 "로그인 중"인 소리는 스테이트리스 환경에서 쉽게 정의 할 수 없습니다. 나는이 요구 사항을 가져 오는 사고 사슬을 비판적으로 검토 할 것입니다. 이것을 구현 한 후에는 아마 다시 제거하게 될 것입니다. –

+0

상태를 저장하지 않도록 설계 되었기 때문에 그렇게 사용하면 안됩니다. –

답변

3

로그인 할 때 토큰을 생성하여 데이터베이스에 저장할 수 있습니까?
그런 다음 토큰이 사용자가 제공 한 토큰과 일치하는지 항상 확인하십시오.
다른 장치에 로그인하는 경우 토큰이 덮어 쓰여지고 첫 번째 세션과 일치하지 않으므로 첫 번째 세션이 유효하지 않게됩니다.

EDIT :
댓글에서 물어 본 것처럼 다른 사용자가 다른 기기에서 동시에 두 번째 로그인을 수행하는 것을 차단하지는 않으며 이전 세션 만 무효화합니다.
두 번째 로그인을 피하려면 더 많은 작업이 필요하며 위에 표시된 방법만큼 안전하지 않습니다.
사용자가 로그 아웃을 수행하지 않고 브라우저를 닫으면 ... 세션을 차단합니다.
근사값은 로그인에 시간 매개 변수를 추가하는 것입니다 (데이터베이스에 추가하고 모든 사용자 작업에서 필드를 업데이트).
토큰이 일치하지 않고 시간 범위가 충분하지 않은 경우 (예 : 5 분) "두 번 로그인 할 수 없습니다."라는 메시지를 표시하십시오. 하지만 내 예제에서 토큰이 변경된 경우 "세션이 만료되었습니다."표시해야합니다.

+0

상자에는이 상자가 있습니다. 나는 그것이 V1에서 사용되었다고 생각하지 않는다. – Casey

1

"로그인 한 사용자가 임의의 토큰을 생성해야 할 때마다 아이디어가 매우 간단합니다. 그런 다음 토큰을 데이터베이스 및 세션에 저장해야합니다. 또는 Microsoft 양식 인증을 사용하는 경우 티켓에 저장할 수 있습니다 , 사용자가 페이지를 요청할 때마다 세션 토큰이 데이터베이스 토큰과 동일한 지 확인할 것입니다.

http://engthunder.wordpress.com/2011/10/19/preventing-multiple-user-from-logging-in-using-the-same-username-single-user-login-at-a-time/

+0

이 방법을 사용하면 두 번째 시도가 로그인하는 것을 의미합니까? 첫 번째 로그인을 차단하는 대신 "이 계정은 이미 로그인되었습니다"라는 페이지를 표시하고 싶습니다. – Fred

+0

이 방법은 동일한 계정이 두 번 이상 로그인했는지 여부를 알려주므로이 정보는 최대 당신. – Oscar