2011-11-16 3 views
1

이것은 주어진 사용자의 세션을 재구성하는 올바른 방법입니까?

다음과 같은 기능이 있습니다.

 $sid = mysql_real_escape_string($_COOKIE['session_id']); 
if($sid) { session_id($sid); } 

// Start session 
if(!session_start()) { die('Session could not be started.'); } 
$sid = session_id(); 

// Validate session id 
$user = $this->validateSessionId($sid); 

if($user) { 
    if(!$user['uid']) { 
     trigger_error('`Services->__construct()` - Could not find user by session id \''.(string)$sid.'\'.', 
       E_USER_ERROR); 
    } 

    $_SESSION['uid'] = $user['uid']; 
    $_SESSION['user_name'] = $user['name']; 
    $_SESSION['user_email'] = $user['email']; 
    $_SESSION['user_created'] = $user['created']; 
} 

// If no valid session id, user is anonymous 
else { 
    $_SESSION['user_name'] = 'Anonymous'; 
    $_SESSION['user_created'] = time(); 
} 

사용자가 처음 로그인하면 session_id이라고하는 현재 세션의 ID로 쿠키가 만들어집니다. 이 ID는 데이터베이스 테이블에도 추가됩니다. 내 이해는 세션이 결국 클라이언트와 서버 모두에서 만료되지만 쿠키와 데이터베이스 항목은 원하는만큼 지속되도록 설정할 수 있습니다.

validateSessionId는 데이터베이스에서 세션 ID 테이블을 확인합니다. 세션이 발견되어 30 일 전에 마지막으로 액세스하지 않은 경우 (테이블에서 제거 된 경우), 해당 세션 ID와 연관된 사용자를 나타내는 사용자 목록의 연관 배열. 그러면 해당 사용자의 데이터가 현재 세션에로드됩니다.

이 작업을 올바르게 이해하고 있습니까?

답변

1

전체 session_id() 사업을 피할 수 있습니다. PHP는 session_start()를 호출 할 때 세션 쿠키가 있는지 자동으로 확인하고 그 시간에 세션의 ID를 검색합니다. 이미 완성 된 것을 복제하는 것뿐입니다.

코드는 PHP가 세션을 추적하기 위해 보내는 쿠키가 실제로 영구 쿠키라고 가정합니다. 일반적으로 PHP는 세션 쿠키 만 전송합니다 (예 : 브라우저가 닫힌 경우 삭제). 따라서 사용자는 사이트에 다시 방문 할 때 세션 쿠키가 없으며 매번 새로운 세션을 갖게됩니다.

+0

오, 죄송합니다. 쿠키 값 'session_id'는 처음 로그인 할 때 저장되고 만료 후 사용자 세션을 재구성하는 데 필요합니다. – Hamster

+0

예, 클라이언트 브라우저가 해당 쿠키를 잊어 버린 경우 데이터베이스에 고아 세션 레코드가 생깁니다. 사용자가 들어 와서 쿠키가 없으므로 session_start()가 새 세션 ID를 만듭니다. –

+0

흠. 그 해결책은 다시 로그인 할 때 해당 사용자의 테이블에있는 모든 세션 항목을 지우는 것입니까? 그들은 세션 쿠키없이 어쨌든 다시 로그인해야 할 것입니다 ... – Hamster

관련 문제