세션에 저장하는 정보가 사용자와 관련된 데이터라고 가정합니다. 사용자의 데이터는 어딘지 데이터베이스에서 차례로 꺼내집니다. 그렇다면 내가 권장하는 해결책은 다음과 같습니다.
사용자가 Remember Me 옵션을 선택할 때 설정 한 쿠키는 데이터베이스에서 같은 사용자를 다시 찾을 수있는 값을 포함해야합니다. 로그인 할 때 제공 한 자격 증명을 통해 해당 사용자를 찾은 경우와 동일한 방식으로 세션을 인스턴스화 할 수 있습니다. 유감스럽게도 (쉬운 일은 아니지만) 쉬운 방법으로 사용자 정보에 대한 고유 한 데이터베이스 ID를 저장하는 것이 좋지만 그렇게하지 마십시오!
대신 user_id, session_id, expire_time의 세 열을 포함하는 sessions라는 테이블을 만듭니다. 사용자가 로그인 할 때 'Remember Me'비트를 true로 설정하면 사용자 ID, 세션 ID (session_id() 함수를 호출하여 얻을 수 있음) 및 원하는 시간을 저장할 수 있습니다. '기억 된'세션이 만료되었습니다.
<?php
function persist_session(){
$user_id = $_SESSION['user']->id;
$session_id = session_id();
$expire_time = time() + (60 * 60) * 24; // 24 hours
$sql = "INSERT INTO sessions (user_id, session_id, expire_time), VALUES ($user_id, $session_id, $expire_time)";
mysqli_query($sql); // This assuming you've already set up your DB connection and so on
$_COOKIE['session_id'] = $session_id; // Write the persisted session ID to a cookie
}
?>
이것은 정말 완전한 예제되지 않습니다 : 당신이 당신의 세션에 데이터를 추가하고 사용자가 로그인, 당신은 다음이 유사한 함수를 호출 할 수 있습니다
. 우선, 한 번에 둘 이상의 세션이 테이블에 지속되는 사용자가 없도록하기 위해 몇 가지 코드를 작성하는 것이 좋지만 그만큼 간단합니다 ...
세션 정보를 유지하고 나중에 참조 쿠키에 기록, 쿠키에서 사용자 정보를 가져 오는 것은 매우 간단합니다 :
<?php
function reinstantiate_session(){
if(isset($_COOKIE['session_id')){
$session_info = mysqli_fetch_object(mysqli_query("SELECT * FROM sessions WHERE session_id = '{$_COOKIE[session_id]}'"));
if($session_info){
$_SESSION['user_id'] = $session_info->user_id;
}
}
}
?>
다시 말하지만,이 예제는 ... 당신은 처리 할 것입니다 수만큼 완전하지 않습니다 오류가 발생할 수 있으며 특히 만료 된 정보를 제외하기 위해 find sql을 업데이트해야 할 수도 있습니다.하지만 시작하기에 충분할 것입니다!
사용자가 들어 왔는지 확인하고 누락 된 세션 데이터를 복원해야합니다. –
왜 세션을 사용합니까? ** COOKIE **와 사용자의 테이블 만 데이터베이스에서 사용할 수 있습니다. -'setcookie ("username", "blanked", time() - 3600 * 25, '/'); N 시간 후에 쿠키를 해제 할 수 있습니다. –