오픈 소스 프로젝트를 일부 변경하려고합니다. 사용자가 언제 로그인하여 로그 아웃했는지 추적하고 싶습니다. 지금은 로그인하거나 수동으로 로그 아웃 할 때 db로 로그인 상태를 변경합니다. 현재 문제는 사용자가 로그 아웃 버튼을 누르지 않고 브라우저를 닫은 지 확인할 수 없다는 것입니다. 이런 이유로 사용자 세션이 만료 될 때마다 데이터베이스를 변경하는 함수를 트리거해야합니다. PHP에서 session_set_save_handler
을 시도했지만 전체 세션 비헤이비어를 무시해야합니다. 내가 원하는 것은 기본 세션 동작을 유지하고 사용자의 세션이 만료 될 때 기능을 추가하는 것입니다. 그렇게 할 수있는 방법이 있습니까?PHP 세션 만료 이벤트
답변
나는 뭔가를 정말로 한 번 괴롭 혔습니다. 세션이 페이지 새로 고침/가져 오기/등으로 "업데이트"될 때마다 DB 행의 타임 스탬프를 업데이트했습니다. 두 번째 데몬은 10 분마다 DB를 폴링하고 "정리"작업을 수행했습니다.
목표를 달성하기위한 기본 PHP 기능을 찾을 수 없습니다. 세션 시간 초과가 백그라운드에서 실행되지 않습니다. 시간이 초과 된 세션이 다른 액세스를 시도하지 않는 한 세션이 시간 초과되었는지 알지 못합니다. 이 시점에서 함정에 빠지기가 거의 불가능합니다. 당신은 당신의 결정을 내리고 그것을 적절하게 다룰 수 있습니다.
이 문제에 대한 대기열 & 폴링 아키텍처를 권장합니다. 쉽고 확실히 작동 할 것입니다. 트랜잭션 성능에 대한 우려가 있으시면 memcached를 추가하십시오.
표준 PHP 파일 기반 세션을 사용하고 있다고 가정합니다. 그렇다면 PHP는 php.ini의 session.gc_ * 설정 매개 변수를 기반으로 부실 세션의 자체 가비지 콜렉션을 수행합니다. 가비지 컬렉터를 완전히 비활성화 한 다음 GC 스크립트를 롤백 할 수 있습니다.
'오래된 세션'을 찾으려면 stat() 루프를 사용하여 빠르고 쉽게 파일의 타임 스탬프를 확인하거나 각 파일의 데이터를 구문 분석하여 마지막 파일을 나열하는 변수를 확인하십시오 - 접근 시간. 어느 쪽이든, 세션 파일은 단지 serialize($_SESSION)
의 출력이며 다른 PHP 인스턴스로 간단히 다시로드 할 수 있습니다.
자바 스크립트에서 창 닫기 이벤트는 어떻게됩니까? 그래서 기본적으로 세션은 세션 사이트의 모든 창을 닫을 때 파괴됩니다. 따라서 마지막 창을 닫을 때 (이것은 추가 js 점검을 통해 확인됩니다) 서버에 ajax 요청을 보냅니다.
좋은 생각이지만, 창을 닫았다고해서 세션이 끝났다는 것을 의미하지는 않는다. 브라우저를 열어 두었다가 웹 페이지를 다시로드해도 원래의 세션을 계속 사용할 수 있습니다. 뿐만 아니라 동일한 도메인에 다른 웹 페이지를 하나의 웹 페이지로 남겨두면 여전히 사이트를 방문하는 동안 세션 정보를 데이터베이스에서 제거하는 ajax 이벤트가 발생합니다. 브라우저 종료를 확인하는 자바 스크립트 이벤트가 있다면 더 좋을 것입니다. –
- 1. PHP 세션 만료
- 2. 세션 만료
- 3. ExtJS : store, pagingToolbar 및 PHP 세션 만료
- 4. PHP 세션 : 세션 만료 기간을 10 일로 설정하면 어떻게됩니까?
- 5. ASP.NET의 세션 상태 만료
- 6. CodeIgniter의 세션 만료 시간
- 7. 랙 세션 재설정/만료
- 8. ASP.NET MVC 세션 만료
- 9. 줄무늬 - 리디렉션, 만료 세션
- 10. AppFabric 만료 이벤트
- 11. 세션 종료 이벤트
- 12. ASP.NET MVC의 세션 만료 문제
- 13. Microsoft ReportViewer : 세션 만료 오류
- 14. 장고 세션 만료? 장고의 문서에서
- 15. 만료 된 세션 : 무작위로 삭제해야합니까?
- 16. PHP의 기본 세션 만료 시간은 어떻게됩니까?
- 17. 스프링 보안 : 만료 URL로 리디렉션하지 않고 세션 만료?
- 18. PHP 페이지 만료 문제
- 19. PHP에서 만료 된 asp.net 세션 감지
- 20. asp.net에서 다른 세션 만료 시간 설정
- 21. 젠드 프레임 워크의 세션 만료 시간 얻기
- 22. 프로그래밍 방식으로 랙 세션 쿠키 만료 설정
- 23. 사용자가 활성화 된 경우 세션 만료 방지
- 24. Facebook Connect 및 .Net으로 세션 만료 확인
- 25. facebooker를 사용하여 FB 연결 세션 만료 확인
- 26. 유휴 상태에 있지 않으면 세션 만료
- 27. Django 만료 된 세션 메시지 API
- 28. 만료 된 세션 리디렉션 Tapestry 4
- 29. 타사 응용 프로그램의 유휴 세션 만료
- 30. 실행 쿼리가 만료
나는 비슷한 것을했습니다. 사용자의 최근 페이지/활동을 업데이트하고 데이터베이스를 폴링하여 2 분보다 큰 비활성 세션을 찾고 둘 다 삭제하는 기능을 만들었습니다. 한 돌로 2 마리의 새를 죽일 수 있다고 생각했습니다. 지저분하지만 크론 작업을 만들지 않고 일을 끝냈습니다. –