2011-05-05 4 views
2

사용자가 계정을 가지고 로그인/로그 아웃 할 수있는 대형 PHP (Yii 프레임 워크) 웹 응용 프로그램을 작성하고 있습니다. 단순함을 위해 시스템에 로그인 (...) 및 로그 아웃 (...)이라는 두 가지 기능이 있다고 가정합니다.사용자의 실제 로그 아웃 시간 등록

각 사용자의 로그인 및 로그 아웃 시간을 기록해야합니다. 문제는 사용자가 '로그인'및 '로그 아웃'버튼을 실제로 클릭하지 않을 수도 있다는 것입니다. 예를 들어 브라우저를 닫고 열어서 다음 날 업무를 재개 할 수 있습니다. 이 경우 로그 아웃 또는 로그인 이벤트가 기록되지 않습니다.

이러한 어려움을 어떻게 극복 할 수 있습니까? 따라서 각 사용자가 실제로 시스템에서 매일 얼마나 많은 시간을 보내고 있는지 알 수 있습니까? http://ar.php.net/manual/en/function.session-set-save-handler.php는 등의 세션이 종료 될 때, 호출 파괴, 쓰레기 수집 얻을 것이다 적절한 기능을 처리 할 수있는이 방법 ...

세션 :

답변

1

브라우저 창이 열려 있는지 여부는 아마도 사용자가 시스템에서 작업하고 있는지 여부를 확인하는 최선의 방법이 아닙니다. 차라리 사용자가 '작업 시작'을 결정하기 위해 URL에서 업데이트 또는 실제 페이지 요청을 보내는 자바 스크립트를 통해 '마지막 동작'타임 스탬프를 저장하고 페이지를 떠날 때 로그 아웃합니다. 브라우저의 열린 탭). 작업이 서로 충분히 가깝다면 하나의 세션으로 취급하고 3 시간 동안 아무런 조치가 없다면 해당 세션을 버려진 것으로 간주하십시오.

+0

감사합니다. 이것은 나를 위해 일했습니다! –

+0

@jon skarpeteig 안녕하세요. 나도 똑같은 문제가 있습니다. 당신의 대답은 당신이 정교하거나 약간의 샘플을 줄 수있는 약간의 아이디어를 약간주고 있습니다. – jayanthan

1

한 가지 방법은 자신에게 간단한 세션 핸들러를 작성하는 것입니다 시간 초과 후 자동으로 가비지 수집되고 파괴됩니다. 그러나 사용자가 더 이상 존재하지 않음을 감지하고 닫는 것을 강제 할 수 있습니다.

+0

흥미 롭습니다! 그것으로, 포인터 주셔서 감사합니다. –

0

이것은 어려운 질문입니다. 예를 들어, 무엇이 일을 구성합니까?

  • 브라우저 창을 열면됩니까?
  • 페이지간에 이동 하시겠습니까?

당신은 정기적으로 "하트 비트"로 데이터베이스를 업데이트 할 아약스 위젯을 가질 수있다. 그러나 이것은 브라우저 창이 열려 있다는 것을 알려주는 역할 만합니다. 일단 듣고있는 소리를 듣지 않으면 "로그 아웃"하고 다시 시작하면 세션을 계속 사용할 수 있다면 "로그인"이라고 할 수 있습니다.

다시 말하지만, 나는 이것이 "일하는"것을 추적하는 가장 좋은 방법이라고 확신하지 못합니다.

+0

지금 당장은 창문을 열어 두는 것만으로도 작업 할 수 있다고 가정하고 있지만 물론 항상 그렇지는 않습니다. –