2012-09-01 2 views
0

데이터베이스에서 사용자의 마지막 방문을 업데이트하는 적절한 방법은 무엇입니까?사용자의 last_visit을 설정하는 올바른 방법

나는 사용자 테이블의 열 LAST_VISIT을 가지고 파일을

protected function _initUser() { 
     $this->bootstrap(array('db')); 

     $auth = Zend_Auth::getInstance(); 
     $identity = $auth->getIdentity(); 
     if($identity) { 
      $userModel = new Model_User(); 
      $user_id = $identity->id; 
      $userModel->updateLastVisit($user_id, date("Y-m-d H:i:s")); 
     } 
    } 

을 bootstrap.php이 코드를 추가하는 것이 좋은가요? 아니면 다른 방법으로해야합니까?

편집

나는이 때문에 데이터베이스가 쿼리 5 분에 한 번 씩만을하고 끝났다. 당신은 속도에 문제가없는 경우 확인입니다

protected function _initUser() { 

    $auth = Zend_Auth::getInstance(); 
    if($auth->hasIdentity()) { 
     $currentUser = $auth->getIdentity(); 
     if((time() - strtotime($currentUser->last_visit)) > 60*5) { 
      $last_visit = date("Y-m-d H:i:s"); 
      $currentUser->last_visit = $last_visit; 
      $this->bootstrap(array('db')); 
      $user = new Model_User(); 
      $user->updateLastVisit($currentUser->id, $last_visit); 
     } 
    } 
} 

답변

0

그것을 지금처럼 나는 그것을 떠나거나 (보기의 성능 지점)가 더 잘 작동하게 할 필요가 더 이상 변화가있다 할 수 있습니다. 이제 각 요청에 대해 여러 작업을 수행 할 수 있습니다 (Zend는이 두 줄 뒤로 많은 작업을 수행 할 것입니다). 수십 밀리 초 동안 싸우면,이 라인들은 개선의 첫 번째 후보 중 하나입니다. 나는 당신이 가능한 가장 최근의 가치를 가질 필요가 있다고 생각하지 않는다. 따라서 로그인 후 last_visit를 업데이트하거나 사용자가 "remember me"를 사용하도록 설정하여 자동으로 로그인하는 것으로 충분할 수 있습니다.

0

사용자가 로그인했는지 확인하는 것과 마찬가지로 요청을 전달할 때 plug-in hooks을 사용하여 이러한 종류의 작업을 수행해야합니다. 아키텍처 측면에서 볼 때 부트 스트랩 클래스를 통해 작동하지만 관련이 있습니다 (Aspect-oriented programming 참조)의 cross-cutting concerns으로 이동하십시오.

당신은, 당신의 액세스 검사 플러그인 내에서 @FAngel가 제안 된 것과 비슷한이 작업을 수행 할 수 있습니다 : 로그인 후 또는, 는 데이터베이스마다 시간을 요청하는 피 쿠키를 잡는 후 새 날짜를 저장을 사용자가 다시로드 페이지.

0

마지막 로그인 : LoginController의 datetime을 업데이트하십시오. 예 : https://gist.github.com/2842698 (줄 100) 또는 Keyne이 이미 말했듯이 특수 플러그인에 넣습니다.

마지막 방문 :이 데이터는 키 - 값 저장소 (memached)에 임시로 저장하고 5 분마다 cronjob으로 데이터를 저장합니다. 따라서 DB에 성능 문제가 없습니다.

+0

제발 내 업데이트 된 코드를 한번보세요. 지금 괜찮 니? – kasztelan

+0

예 .. 이것은 또한 좋은 해결책입니다. 노트; 논리적 인 이유 때문에 부트 스트랩 대신이 코드를 플러그인에 넣어야합니다. –

관련 문제