2013-05-20 4 views
2

사용자가 한 브라우저에서 로그인 한 경우 다른 곳에서 로그인 할 수 없다는 요구 사항이 있습니다.한 번에 한 사용자 만 로그인했습니다.

내가 한 것은 사용자가 로그인 할 때 로그 테이블에 자신의 상태를 입력 한 것과 로그 아웃 할 때 그 상태를 업데이트하는 것입니다.

문제가 발생했습니다. 로그 아웃하지 않고 브라우저를 닫으면 어떻게됩니까?

사전에 도움이나 개선을 부탁드립니다 .-) 나는 백 엔드 툴로 codeigniter를 사용하고 있습니다.

+3

데이터베이스에서 "last seen at"필드를 구현합니다.이 필드는 모든 페이지 요청에서 업데이트됩니다. 사용자는 X 분 동안 표시되지 않은 경우 로그 아웃 된 것으로 간주됩니다. –

+0

@Jonathon Reinhart 모든 페이지 요청시 DB의 "마지막으로 본"필드를 확인해야합니까? 그리고이 필드에는 무엇을 저장합니까? IP 주소? – user2013626

+0

타임 스탬프입니다. –

답변

1

서버 측에서이 방법을 사용하는 것이 가장 좋습니다. 응용 프로그램 컨텍스트에서 로그인 한 사용자를 유지할 수 있습니다.

글쎄, 약간의 힌트. 그 것을 - 서블릿 필터의 사용을 확인, 사용자 이름/암호 등 같은 다른 검증 옆에 .. 이제 어느 곳에서이 검사를 가진 후 저기 isAlreadyLoggedIn(), 수 있으며, AuthFilter 말과 검증을 사용자가 로그인하려는 사용자에 따라 달라지며 "이미 로그인 한 사용자"라는 메시지를 표시합니다.

+0

브라우저를 닫을 때 문제가 발생합니까? 어떻게하면 로그 아웃했는지 알 수 있습니까? – user2013626

+0

그 때 사용자 로그인에 session-timeout을 사용해야하고 session-timeout에 작은 값을 줄 수 있어야합니다. – Gautam3164

+0

브라우저가 세션을 파괴합니까? 세션 시간 초과를 추적 할 수 없습니까? – user2013626

0

다른 사람들처럼 서버/데이터베이스 측에서 시간 초과를 사용하는 것이 가장 좋습니다.

사용자가 브라우저를 닫았는지 감지하는 방법을 요청했습니다. 사용자가 브라우저 창을 닫으면 javascript onunload 이벤트가 발생합니다. 그러나 비상 정지 또는 자바 스크립트가 꺼져있는 경우에는 실행되지 않으므로 매우 안정적이지 않습니다.

왜 서버 측에서 시간 제한을 구현하는 것이 좋습니다. 예를 들어 사용자는 공용 컴퓨터에서 로그인 한 후 로그 오프하는 것을 잊어 버렸을 수 있습니다. 이 경우 브라우저 창을 여는 경우라도 세션을 종료해야합니다.

또한 어떤 종류의 시간 초과를 사용하면 세션 고정 공격의 변경이 줄어 듭니다.

관련 문제