2011-09-22 6 views
1

동일한 사용자가 동시에 여러 로그인을 CakePHP (1.2) 구동 사이트에 금지하려고합니다. 그러나 사용자가 이미 로그인했는지 여부를 알 수 없으므로 생각만큼 쉽지 않습니다.CakePHP : 사용자가 이미 로그인했는지 확인하십시오.

저는 Cake의 인증 구성 요소를 사용하여 사용자를 인증하고 있습니다. 세션은 PHP 설치에 의해 처리되고 PHP는 세션 데이터를 파일에 저장합니다. 그래서 컨트롤러에서 세션 데이터에 액세스 할 수 없다고 생각합니다 (물론이 파일은 웹 루트에 저장되지 않습니다). 사용자가 특수 데이터베이스 필드를 사용하여 로그인했는지 여부를 확인하는 방법에 대해 생각했지만 logout-method를 사용하지 않고 단순히 브라우저를 닫으면 사용자가 로그 아웃되었는지 여부를 확인할 방법이 없습니다. 그래서 세션이 종료됩니다.

다른 사람이 어떻게 관리 할 수 ​​있습니까? 모든 로그인 한 사용자에 대한 모든 데이터를 알 필요가 없습니다. 내가 알아야 할 유일한 것은 주어진 사용자 이름이 현재 로그인되어 있는지입니다.

미리 감사드립니다.

답변

3

가 나는 세션 ID마다 다시 생성대로, 핵심 설정 파일에 highSecurity.level를 설정하면 CakePHP는 자동으로이 문제를 갖고있을 것 .

Configure::write('Security.level', 'high'); 

또는, 그 뒤에 논리는 경우가 로그인 할 때 사용자 테이블에 사용자 IP/사용자 에이전트의 해시를 저장하고, 수 당신이 시도를 저장 한 것과 다른 해시가있는 컴퓨터 뭔가를하려면 사용자를 로그 아웃하십시오. 이 방법은 최신 사용자 만 작동합니다.

+0

Hehe, 나에게 이길. high로 설정하면, CakePHP는 이미 사용자 에이전트를 검사합니다 (해쉬하고 세션 파일에 저장하므로 데이터베이스 필드가 필요 없습니다). 일부 사용자는 공개 IP 풀을 사용하는 프록시 서버 뒤에 있기 때문에 IP 변경을 확인하지 않습니다. – deizel

+0

아, +1을 깜박했습니다. – deizel

+0

꽤 괜찮은 것 같습니다. 그러나 세션 ID를 다시 생성하면 로그인 한 사용자가 임의로 로그 아웃되는 부작용이있는 것으로 보입니다. security.level이 'medium'으로 설정되어 있으면 적어도 그런 일은 발생하지 않습니다. 내가 뭔가 잘못하고 있는거야? – j0ker

관련 문제