이것은 주어진 사용자의 세션을 재구성하는 올바른 방법입니까?
다음과 같은 기능이 있습니다. $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와 연관된 사용자를 나타내는 사용자 목록의 연관 배열. 그러면 해당 사용자의 데이터가 현재 세션에로드됩니다.
이 작업을 올바르게 이해하고 있습니까?
오, 죄송합니다. 쿠키 값 'session_id'는 처음 로그인 할 때 저장되고 만료 후 사용자 세션을 재구성하는 데 필요합니다. – Hamster
예, 클라이언트 브라우저가 해당 쿠키를 잊어 버린 경우 데이터베이스에 고아 세션 레코드가 생깁니다. 사용자가 들어 와서 쿠키가 없으므로 session_start()가 새 세션 ID를 만듭니다. –
흠. 그 해결책은 다시 로그인 할 때 해당 사용자의 테이블에있는 모든 세션 항목을 지우는 것입니까? 그들은 세션 쿠키없이 어쨌든 다시 로그인해야 할 것입니다 ... – Hamster