2011-09-14 2 views
0

사용자 로그인 및 로그 아웃을 알아야 할 때 문제는 사용자 세션 시간 초과 일 때 어떻게 응용 프로그램을 업데이트 할 수 있습니까?Zend Framework에서 세션 삭제를 처리하는 방법은 무엇입니까?

세션이 종료되면 예를 들어 db 테이블을 업데이트 하시겠습니까?

나는 cron 작업을 사용하는 것을 선호하지 않습니다. 왜냐하면 그것은 서버에 많은 양을로드 할 것이기 때문입니다.

미리 감사드립니다.

+0

당신에게 얼마나 중요한가? 이 작업을 수행하는 기본 제공 메커니즘이 있지만 성능과 최신 정보의 균형을 유지해야합니다. – Jon

+0

최신 정보가 있어야하며 한 명의 사용자 만 로그인 할 수 있어야합니다. – elibanon

+0

퍼펙트 히트없이 최신 정보를 유지할 방법이 없습니다. HTTP 세션이 작동하는 방식입니다. – Jon

답변

0

일반적으로 성능에 큰 타격을주지 않고 모든 사용자의 세션 상태에 대한 동시 정보를 유지할 방법이 없습니다. 이미 말씀 드렸듯이 이것은 세션이 끝나면 세션을 제대로 종료 할 수없는 결과입니다.

1. 실행 (결정) cron 작업

당신은 자주 당신이 필요로 실행되도록 cron 작업을 설정할 수 있습니다 :이 시점에서

은 두 가지 옵션이 있습니다. 이렇게하면 보유한 정보가 크론 간격만큼 오래 유지됩니다.

2를 설정 session.gc_probabilitysession.gc_divisor PHP 옵션 설정 세션 GC 확률

는 세션 정리가 모든 요청에 을 시작됩니다있는 확률을 지정할 수 있습니다. 일반적으로 서버 부하가 매우 높을 경우 성능이 매우 빨리 떨어질 수 있으므로 상대적으로 낮은 값 (예 : 1/100)입니다.

이 접근 방식의 장점은 서버가 실제로 서버에 닿지 않는 경우 비용이 발생하지 않는다는 것입니다.

가장 큰 단점은 서버에서 초당 요청 수를 고려하여 항상 확률을 조정해야한다는 것입니다.이 값은 상수가 아닙니다. 다른 단점은 실제로 작업하기위한 요청 (서버를 방문하지 않으면 세션을 정리하지 않음)과 전역 설정 (응용 프로그램 전체가 아닌 서버 전체에서 작동 함)에 의존한다는 사실입니다.

+0

먼저 세션의 GC에 대한 답변을 주셔서 감사합니다. 세션의 삭제를 처리 할 수 ​​있습니까? 예를 들어 db 테이블을 업데이트하고 싶습니다. – elibanon

+0

@elibanon : 예, ['session_set_save_handler'] (http://www.php.net/manual/en/function.session-set-save-handler.php)에서이 작업을 수행 할 수 있습니다. 그러나 ZF가 이미이를 수행한다는 것은 100 % 확실합니다. ZF의 세션 핸들러에 어떻게 플러그인 할 수 있는지, 사용하지 않았는지 잘 모르겠습니다. – Jon

+0

이 인터페이스를 Zend_Session_SaveHandler_Interface로 사용했습니다. – elibanon