Eski bir projem için hazırlamıştım. Veritabanı işlemlerinde sınıf kullanmışım, o kodları pdo'ya göre değiştir. Direk kopyala yapıştır yaparsan sınıf hatası verecektir. Umarım biraz örnek olur.

Güvenlik konusunda ek olarak tokeni 5 dk'da bir hem çerezde hem de veritabanında değişmesini sağlayabilirsin. Ama bu sunucuya ek yük bindirecektir. Bunun dışında kullanıcı yeniden giriş yaptığında token zaten değişecektir.

Eğer beni hatırla seçiliyse;

if ( @$remember_me == '1' ) {

$remember_token = bin2hex(openssl_random_pseudo_bytes(64));

setcookie("token", $remember_token , time()+60*60*24*7, '/login',null,false,true );

//Varsa önceki tokenleri sil
$affected = DB::exec("DELETE FROM remember_me WHERE user_token='$user->user_token' ");

$id = DB::insert(
'INSERT INTO remember_me (user_id, remember_token,date) VALUES ( ?, ?,?)',
array($user_id,$remember_token, time() )
);

}



Login sayfasının başına;

if ( @$_COOKIE["token"] != "" ) {

$tok = $_COOKIE['token'];



$name = DB::getVar("SELECT user_token FROM remember_me WHERE remember_token = '$tok' LIMIT 1");

if ( $name != "" ) {


$user = DB::getRow("SELECT * FROM general_users WHERE user_token='$name' LIMIT 1");

if ( @$user->id == "" ) { setcookie("token", 'invalid'); header("Location:/"); die(); }


$_SESSION['oturum'] = 'active';
$_SESSION['user_token'] = $user->user_token;
$_SESSION['user_name'] = $user->user_name;
$_SESSION['user_payment_status'] = $user->user_payment_status;
$_SESSION['user_email_status'] = $user->user_email_status;
$_SESSION['user_type'] = $user->user_type;

header("Location:/");
}
}