2011-09-15 3 views
1

사이트에서 다중 로그인 (동일한 사용자 이름으로 다른 컴퓨터에서 로그인)을 제한하는 임무가 있습니다. 내 PM은 세션 ID 저장과 함께이 작업을 수행하려고합니다. 내가 어떻게 할 수 있니? 내가 로그인 후 데이터베이스에 플래그를 저장하고 unlogin 후 unmark .. 생각하지만 브라우저가 갑자기 또는 우연히 닫힌 경우 unmarked 수 없습니다. 당신은 UUID, 사용자의 ID와, 데이타베이스에서 타임 스탬프를 저장해야CakePhp에서 다중 로그인 제한

답변

1

을 제발 도와주세요 : 로그인에

  1. 는 사용자 (String::uuid();)의 현재 세션에 대한 UUID를 생성하고있는 UUID를 저장 사용자 세션 및 쿠키에 저장됩니다.
  2. 사용자가 이미 활성 세션이나 쿠키가있는 경우 해당 세션에서 UUID를 읽습니다.
  3. 사용자가 다음과 같은 경우에 "유효"합니다.
    • 사용자가 로그인해도 데이터베이스 항목이 없습니다. UUID는 중요하지 않습니다.
    • 사용자가 로그인하고 타임 스탬프가 "오래된"입니다 (직접 값을 정의 ... 15 분?). UUID는 중요하지 않습니다.
    • 사용자 UUID와 사용자 ID가 데이터베이스 항목과 일치하며 타임 스탬프가 "오래된"것이 아닙니다.
  4. 데이터베이스에 다른 UUID가 있고 해당 타임 스탬프가 "오래된"경우 사용자는 이제 "유효하지 않습니다".
  5. 사용자가 직접 로그 아웃하면 데이터베이스 항목을 제거하십시오. 사용자가 브라우저를 닫으면 쿠키를 통해 세션을 다시 시작하거나 타임 스탬프가 "오래된"후에 세션 (브라우저 중 하나가 아닌 응용 프로그램 세션)이 자동으로 무효화됩니다.

단점 : 사용자가 컴퓨터/브라우저를 빨리 전환하려면 로그 아웃 기능을 사용해야하며 그렇지 않으면 정의 된 시간이 초과 될 때까지 기다려야합니다. 그러나 세션 충돌시 현재 활성 사용자를 로그 아웃하고 모든 활성 프로세스 또는 응용 프로그램에서 수행중인 모든 작업을 닫는 메커니즘을 구현할 수도 있습니다.

관련 문제