2010-12-09 3 views
7

Zend Framework를 사용하여 현재 온라인 사용자 수나 웹 사이트에서 활성 세션 수를 얻는 방법을 알고 싶습니다.Zend Framework를 사용하여 로그인 한 온라인 사용자를 확인하는 방법

세션 저장 경로를 읽는 일반적인 방법을 시도했지만 Zend를 사용하지 않았습니다. 아무도 나에게 시간의 어떤 순간에 서버에 얼마나 많은 활성 세션이 있는지 알 수있는 좋은 방법을 제안 할 수 있습니까?

+0

업데이트 된 게시물보기 –

답변

2

세션을 사용하여이 작업을 수행 할 수 없으면 온라인 사용자를 DB에 저장하고 활성 상태 인 모든 사용자를 표시해야합니다. 로그에서 DB의 레코드 삭제/업데이트를 로그 아웃하십시오.

또는 사용자가 로그인/로그 아웃 할 때마다 ur users 테이블에 플래그를 넣고 업데이트 플래그를 y/n으로 지정하십시오.

또는 이와 유사한.

사용자가 로그 아웃하지 않고 브라우저를 닫으면 다음에 사용자가 로그인을 시도 할 때 u가 있으면 해당 사용자의 이전 활성 세션을 확인할 수 있습니까? 사용자에게 마지막 로그 아웃이 올바르지 않다는 창을 표시하고 해당 사용자의 일정을 업데이트 시간으로 가져 오거나 늦은 세션에 대한 로그 아웃 시간 (예상)을 입력하도록 요청하거나 사용자가 시간을 선택하는 데 관심이없는 경우 로그 아웃을 업데이트 할 수 있습니다 로그 아웃 시간. 로그인 지속 시간의 비방 된 간격을 만드십시오.

이렇게 생각하면 ......

+4

이 방법의 문제점은 사이트를 떠날 때마다 모든 사용자가 로그 아웃하지 않고 브라우저를 닫고 나갈 수 있다는 것입니다. 이 경우에는 db에서 해당 세션을 자동으로 삭제할 수있는 방법이 없습니다. 그래서이 방법은 기본적으로 결함이 있습니다. –

+3

그 결함이 없습니다, 당신은 또 다른 열'lastTimestamp'를 추가 할 수 있으며, 그가 새 페이지를 여는 경우, 사용자가 그/그녀의 브라우저를 닫으면 로그 아웃 할 수 있도록 오래된 타임 스탬프를 가지고있을 것입니다. 예를 들어 매 30 분마다 실행되는 cron을 통해 그 사람들이 자동으로 나타납니다. – tawfekov

+0

이 lasttimestamp 아이디어는 시원해 보입니다. 오늘 밤에 시도해보고 사람들을 알립니다! –

4

최근에이 문제가있었습니다. 이처럼 해결 : 일반적으로 컨트롤러가 예를 들어, Zend_Controller_Action에는의 확장이다

class IndexController extends Zend_Controller_Action 

우리가 우리의 프로젝트에 한 일은/라이브러리/ME/컨트롤러에서 확장 된 컨트롤러를 만들 수 있었다

class ME_Controller_Base extends Zend_Controller_Action 
    public function init() 
    { 
     parent::init(); 
    } 
} 

이 컨트롤러를 사용하면 다른 컨트롤러를 모두 확장 할 수 있습니다. 위의 기본 컨트롤러는

class IndexController extends Zend_Controller_Action 
(210)

class IndexController extends ME_Controller_Base 

중요

에,

class IndexController extends ME_Controller_Base 
{ 
    public function init() 
    { 
     parent::init(); 
    } 
} 

이제 당신은 추가 할 수 있습니다 (이것은 좋은 연습 어쨌든) 항상 컨트롤러의 초기화() 섹션에 부모 :: 초기화()를 호출하는 것을 잊지 원하는 "코드"컨트롤러를 선택하십시오. 우리는 교리 사용자 개체와 Zend_Auth 사용되기 때문에이

class ME_Controller_Base extends Zend_Controller_Action 
    public function init() 
    { 
     parent::init(); 
     $auth = Zend_Auth::getInstance(); 
     $this->view->user = $auth; 
     $this->user  = $auth; 

     // check auth 
     ... 
     // write an update to say that this user is still alive 
     $this->user->getIdentity()->update(); 
    } 
} 

업데이트() 메소드는 단지 현재 날짜에 "업데이트"필드를 설정하고 사용자를 플러시처럼, 마지막 "기본"컨트롤러 보인다. 마지막 X 분 내에 표시된 사용자를 선택하여 목록을 표시 할 수 있습니다.

+0

'controller_action_helper', 플러그인을 추가하거나'postDispatch()'메소드를 사용하면 매번'parent :: init()'을하지 않아도됩니다. 또한,'postDispatch()'를 사용하여 json/xml 요청을 할 때 당신의 물건이 실행되지 않도록 할 수있다. –

1

Zend Front Controller 플러그인 (예제 here 참조)을 생성하고 사용하여 모든 요청을 웹 사이트 또는 웹 응용 프로그램에 등록 할 수 있습니다.

class App_Plugin_RegisterActivity extends Zend_Controller_Plugin_Abstract 
{ 
    public function dispatchLoopShutdown() { 

     // read user identity 
     $auth = Zend_Auth::getInstance(); 
     $authStorage = $auth->getStorage(); 
     $identity = $authStorage->read(); 

     $userID = $identity->id; 

     // update user's table with current timestamp 
     ..... 

    } 
} 

그런 다음 활성 사용자 수를 계산합니다.

관련 문제