2010-03-04 4 views
4

아래에서 설명하는 내 프로젝트 (ASP.NET 2.0에서 작성된 웹 응용 프로그램)에 심각한 문제가 있습니다.단일 인스턴스 로그인 구현

사용자 아이디가 "singh_nirajan"이고 사용자가이 사용자 아이디를 사용하여 시스템에 로그인 한 "사용자 1"이라고 말한 경우를 가정 해 보겠습니다. 이제 내 요구 사항은 다른 사용자가 사용자 "User2"가 동일한 (singh_nirajan) 사용자 ID를 사용하여 시스템에 로그인하려고 할 때마다 "singh_nirajan already logged in"메시지를 표시합니다.

동일한 것을 구현하기 위해 데이터베이스에서 플래그를 업데이트합니다. 마찬가지로 우리는 사용자가 올바르게 로그 아웃 할 때마다 데이터베이스의 플래그를 업데이트합니다. 또한 사용자가 다음과 같이 제대로 로그 아웃하지 못할 경우 몇 가지 시나리오를 처리했습니다. 오류

  • 세션 제한 시간
  • 가까운 어쨌든 사용자로 인해 네트워크 오류, 정전 또는 그러한 이유로 갑자기 로그 아웃됩니다 (X)를 클릭하여

    1. 브라우저에서 가깝습니다. 데이터베이스에서 플래그를 업데이트 할 수 없습니다. 그 이유는 사용자가 해당 플래그를 수동으로 업데이트하지 않는 한 동일한 사용자 ID를 사용하여 로그인 할 수없는 이유입니다. 위의 구현을위한

      이유 :

      언젠가 사용자 열려있는 여러 브라우저와는 시간의 대부분은 그들이 언젠가 동시성 문제를 초대 자신의 사용자 ID와 암호를 공유하고, 다른 브라우저에서 무거운 처리 작업을 시작했다. 이를 제한하기 위해 단일 인스턴스 로그인을 구현해야합니다.

      위의 구현 방법을 다른 방법으로 제안 할 수 있습니까?

      미리 감사드립니다.

  • +1

    동일한 사용자가 동일한 컴퓨터에서 두 번 로그인 할 수 있어야합니까? (예 : 브라우저가 종료되고 컴퓨터가 재부팅되는 경우 등)? 동일한 사용자가 동일한 컴퓨터의 두 개의 다른 창에서 로그인 할 수 있어야합니까? 이 앱이 인트라넷에 있습니까? 여러 플랫폼 (예 : Mac, Linux 등)을 지원해야합니까? – Thomas

    +0

    예, 브라우저가 종료되면 사용자는 로그인 할 수 있습니다. 주요 관심사는 동일한 사용자 또는 다른 사용자의 특정 사용자 ID를 사용하여 한 번에 한 사용자 만 로그인 할 수 있어야한다는 것입니다. 이 응용 프로그램은 인트라넷에 있으며 다중 플랫폼을 지원하지 않습니다. –

    +0

    여기서 문제는 두 사람이 동일한 사용자 ID를 공유하게한다는 사실에서 유래합니다. "one userid pr person"연습을 따르지 않는 이유를 조금 더 설명해 주시겠습니까? –

    답변

    2

    브라우저는 본질적으로 연결이 끊어진 시스템입니다 (모든 의도와 목적으로). 은 사용자의 브라우저 세션이 끝날 때 클라이언트로부터 알림을 받으면 안됩니다. 내가 짜증나는 다른 컴퓨터하거나 여러 브라우저 (VM 게스트 대 VM 호스트 대 일 대 집에 대 데스크톱 대 노트북)에 정기적으로 i를 동일한 웹 사이트로이 단일 로그인 동작을 찾을 것입니다 (사용자로) 개인적으로

    (특히 브라우저 호환성 테스트와 같은) 동일한 컴퓨터에서 실행되지만, 필자는 이것이 요구 사항 일 수 있음을 인정합니다.

    IMO, "단일 세션"요구 사항이있는 경우 더 나은 접근 방식은 "마지막 승리"입니다. 즉, 두 번째 세션에 로그인하면 첫 번째 (본질적으로 토큰이 깨집니다) - 첫 번째 세션 로그 오프됩니다. 그것은 입니다. (데이터베이스에서 guid를 변경하거나 로그인시 특정 사용자에 대해 카운터를 증가). 필요한 경우 두 번째 세션의 IP (또는 무엇이든)를 기록 할 수 있지만 두 번째 세션이 "singh_nirajan"으로 인증 될 수 있으면 가장 일반적인 시나리오에서 충분해야합니다.

    +0

    @Marc 첫 번째 세션을 강제로 로그 오프 할 수 없으며, 중요한 활동을 수행 할 수도 있습니다. 중간에 쫓아 낼 수는 없습니다. –

    +0

    @Nirajan - 로그 아웃 이벤트를 보장 할 수있는 방법이 없다는 이유로 당신이 가질 수없는 것을 원하는 것처럼 들립니다. 이것이 최후의 승리가 최선의 접근 방법 인 이유입니다. 여기있는 문제는 사람들 기반의 시스템이 아닙니다. 두 번 로그인해야 할 이유가 없습니다. 특히 뭔가 적극적으로 작업하는 경우가 아니기 때문에 개발중인 플랫폼의 제약 조건을 수용하고 요구 사항을 다시 방문해야합니다. . – Murph

    +0

    @Nirajan : "그/그녀"는 그 중요한 활동을하는 사람과 같지 않습니까? 그렇다면 왜 다른 활동을하면서 동시에 로그인하고 싶습니까? 드물게 두 사람이 동일한 사용자 이름을 가지고있는 경우를 제외하고는 시스템이 어쨌든 방지 할 수 있어야합니다. –

    0

    로그인 한 플래그를 저장할 때 lastlogindatetime 필드를 설정하십시오.

    로그인 방법에는 올바르게 닫히지 않은 이전 세션인지를 결정하기 위해 비트 및 날짜 시간 스탬프를 모두 보는 논리가 있어야합니다.

    0

    여기서 트릭은 통신이 동일한 시스템에서 이루어지고 있음을 확인하는 것입니다. Windows 응용 프로그램에서는 db에 워크 스테이션 이름을 전달합니다. 동일한 워크 스테이션에서 두 개의 로그인 요청이 허용됩니다. 다른 워크 스테이션에서 2 명이 거부됩니다. 그러나 웹에서는이를 수행 할 수있는 간단한 방법이 없습니다. 회사에서 DHCP를 사용하지 않거나 모든 사람이 IP 예약을 가지고있는 경우 IP를 사용해 볼 수 있습니다. WinForms에서 응용 프로그램을 수행하는 것이 옵션이 아니라면 작은 클릭 한번으로 응용 프로그램을 사용하여 db에 워크 스테이션 이름을 전달해보십시오. 예전에는 IE를 강제하고 ActiveX 컨트롤을 사용하여 인트라넷 앱에서이 문제를 해결했습니다. 자비 롭게도, 우리는 그 이상으로 나아 갔지만 이런 유형의 문제를 해결했습니다.

    관련 문제