2012-03-12 5 views
1

다음 패키지를 사용하여 내 사이트에서 remember me 기능을 사용했습니다 : http://www.jasperrooswinkel.com/unexpected-expiration-of-zend_auth-sessions/. 잘 작동합니다. 하지만, 삭제 된 사용자는 단지 때문에 로그인 상태 유지의 계정에 액세스 할 수있는 문제에 직면젠드 프레임 워크 내 정보 기억하기 - 작업 중

다음과 같은 시나리오는 다음과 같습니다..

  1. 사용자 로그인 나를 로그인 유지 설정 한 후
  2. 그는 떠나 시스템은 로그 아웃하지 않고 종료됩니다.
  3. 그날 저녁에 그의 계정이 삭제되었습니다.
  4. 그는 다음날 아침에 사이트를 사용합니다.

로그인 상태가 유지되면서 그는 자신의 세션을 가져오고 이야기를 게시하고 자신의 계정이 전날 삭제 된 사실을 모른 채 자신의 계정에서 무엇을 할 수 있습니다. 또한, 나는 14 일 동안 기억을 설정했다.

어떤 아이디어로이 문제를 해결할 수 있습니까?

덕분에 그는 숙박이 설정 한대로

+0

확인할 수만 있습니다. 세션이 끝나고 사용자가 삭제되고 영구 로그인 절차가 시작되어 사용자가 로그인 상태가 유지되는 순간 사용자가 계속 존재하는지 확인해야합니다. – hakre

+0

실제로 사용자가 인증하는 방법에 따라 다릅니다. 데이터베이스에 액세스하여 수동으로 계정을 삭제하려고 할 수 있습니다. – Tom

+0

셜리 사이트가 편집하거나 게시 할 때 사용자가 권한을 가지고 있는지 확인해야합니까? 그렇지 않으면, 나는 당신에게 많은 문제를주고 있다면 로그인 옵션을 제거하는 것이 좋습니다. 또는 다음 날 사이트로 돌아올 때 세션 정보를 확인하여 해당 사용자가 존재하는지 여부를 확인할 수 있습니다. 그것 이외에, 나는 이것을 시행 할 좋은 방법을 생각할 수 없다. – jammypeach

답변

3

을 해보자 설정을 변경하거나 등 새 게시물 또는 새 의견 게시를 보내는 식으로 뭔가를 할 수있는 그가 시도 할 때마다 확인해야합니다 생각 말했듯 몇 시간 이상은 여러 가지 이유로 나쁜 생각입니다. 단지 삭제 된 사용자 세션을 유지하고 있기 때문 만은 아닙니다. 데이터베이스/세션 저장소에 활성 세션 (session_id 포함)을 유지한다는 사실과 관련된 성능 및 보안 문제가 있습니다.

persisted login with Zend_Session::rememberMe을 참조하십시오.

은 어떤 경우에, 당신은 자신의 사용자가 여전히 존재 확인 및 활성화하기 위해, 각 페이지로드에 사용자 계정을 재 검증해야합니다

나는 모든 페이지로드 부르는 재 검증 기능을 만들었습니다. 이 함수는 사용자가 무엇이든 할 수 있기 전에 컨트롤러의 init() 함수에서 호출됩니다.

public static function revalidate() { 
     $userData = self::getIdentity(); 

     $modelUsers = new \Model_Users(); 
     $user = $modelUsers->fetchWithEmail($userData['email']); 

     if ($user instanceof \Model_User) { 
      if ($user->getRoleType() == 'ACCOUNT') { 
       return $user; 
      } 
     } 
     return false; 
    } 
2

로그인을, 그는 자신의 세션을 얻고 그는 자신의 계정이 전날에 삭제되었다는 사실을 모른 채 이야기를 게시하고 자신의 계정에서 무엇을 지금 할 수있다.

사용자를 삭제할 때 모든 사용자의 세션도 삭제해야합니다.

+0

친구 감사합니다 .. !! – Janaki

0

이것은 정확히 입니다.은 모든 응용 프로그램/페이지에 대한 세션 시간 제한을 설정해야합니다.

세션이 데이터베이스에 세션 테이블에서

if (!empty(session_id())) { 
    header("Location: index.php"); //GO to home page 
    exit; 
} 
+0

귀중한 의견을 보내 주셔서 감사합니다. – Janaki

1

같은 모든 보안 페이지에서 살아 경우 사용 ini_set()에서, 세션 수명에

ini_set("session.cookie_lifetime","1800"); //half an hour 

그런 다음 외국를 사용 확인 ON DELETE CASCADE가있는 USERS 테이블의 키. 또는 세션을 가져올 때 사용자 테이블에서 JOIN을 수행 할 수 있습니다.

0

사용자가 컴퓨터를 떠나서 다음 날 웹 사이트로 돌아 오면 세션이 오래 만료되었습니다. 이 시점에서, 그가 당신의 웹 사이트에 접근하도록 허락한다면, 그가 기억하기로 선택했기 때문입니다. 당신은 컴퓨터에 쿠키를 설정함으로써 그렇게합니다.

쿠키를 기반으로 사용자를 인증 할 때 이어야합니다. 데이터베이스에 대해 쿠키 값을 확인해야합니다. 쿠키가 있는지 확인하지 마십시오..

이렇게하면 문제가 해결됩니다. 또한 악의적 인 사용자가 컴퓨터에서 쿠키를 수동으로 만들고이를 사용하여 웹 사이트를 인증 할 수있는 주요 보안 구멍을 막을 수 있습니다.

0

확인할 수만 있습니다.세션이 끝나고 사용자가 삭제되고 영구 로그인 절차가 시작되어 에 로그인하면 사용자가 계속 존재하는지 확인해야합니다. - hakre

hakre 내가 당신을 사용자에게의가 세션의 만료 시간을 연장 그것은