brown hocam örnek olarak paylaşabilir misin? çünkü ben şu cookie olayını çözemedim gitti :)
Hocam şöyle yapıyorum;
if ($_POST) {
$username = @strip_tags(trim($_POST["username"]));
$password = @strip_tags(trim($_POST["password"]));
if (empty($username) or empty($password)) {
echo "Lütfen boş alan bırakmayınız.";
die;
} else {
$password= md5($password);
$control = $connect->query("SELECT * FROM members WHERE username='$username' AND password='$password'");
$there_is = $control->num_rows;
if ($there_is == 1) {
$member_info = $control->fetch_assoc();
$remember = @$_POST["remember"];
if ($remember == "yes") {
$member_id = $member_info['id'];
$token= md5($username.time()));
$save_token = $connect->query("UPDATE members SET session_token='$token' WHERE id='$member_id'");
setcookie("token","$token", time()+60*60*24*7);
$_SESSION["acces"] = TRUE;
$_SESSION["remember"] = TRUE;
$_SESSION["username"] = "$username";
$_SESSION["id"] = $member_info["id"];
echo "Başarıyla giriş yaptınız";
} else {
$_SESSION["acces"] = TRUE;
$_SESSION["username"] = "$username";
$_SESSION["id"] = $member_info["id"];
$control_token = $connect->query("UPDATE members SET session_token='not_remember_me' WHERE username='$username'");
echo "Başarıyla giriş yaptınız.";
}
} else {
echo "Girdiğiniz kullanıcı adı ve şifre veritabanında eşleştirilemedi.";
}
}
} else {
echo '
Sistemde işlem yapabilmek için giriş yapmalısınız.
';
}
Burası login.php sayfam. Eğer gelen bir post yoksa giriş kutusunu yazdırıyorum, giriş kutusundan bir post geldiğinde ise giriş işlemine başlıyorum. İlk olarak boş alan var mı bunu kontrol ettiriyorum. Boş alan yoksa kullanıcı ve şifrenin veritabanında eşleşip eşleşmediğine bakıyorum. Eşleşme sağlandığında ise kullanıcı "beni hatırla" seçeneğini işaretlemiş mi işaretlememiş mi buna bakıyorum. Eğer işaretlemediyse yalnızca oturum başlatıyorum. Yok eğer işaretlediyse kullanıcın bilgisayarında (cookie) ve veritabanında saklamak üzere bir "token" oluşturuyorum ve bunun ardından oturumu başlatıyorum.
Ardından her sayfada şu kontrolü yapıyorum;
if(!@$_SESSION["acces"]) {
if(isset($_COOKIE["token"])) {
$token = $_COOKIE["token"];
$control_token = $connect->query("SELECT * FROM members WHERE session_token='$token'");
$control_token_registered = $control_token->num_rows;
if ($control_token_registered > 0) {
$user_infos = $control_token->fetch_assoc();
session_destroy();
session_start();
$_SESSION["acces"] = TRUE;
$_SESSION["username"] = $user_infos["username"];
$_SESSION["id"] = $user_infos["id"];
setcookie("token","$token", time()-3600);
setcookie("token","$token", time()+60*60*24*7);
} else {
session_destroy();
session_start();
}
}
}
Eğer geçerli bir oturum yoksa kullanıcının bilgisayarında token isimli bir cookie olup olmadığına bakıyorum. Eğer cookie mevcutsa bu cookiedeki token değerinin veritabanında eşleşip eşleşmediğini kontrol ediyorum. Eşleştiği takdirde, eşleştiği kişinin hesabına oturum başlatıyorum. Bunun ardından da cookieyi sıfırlıyorum ve 1 haftalık aynı tokendan oluşan yeni bir cookie oluşturuyorum. Böylece kullanıcı 1 haftadan kısa sürede siteye girdiğinde oturumu yenilenmi oluyor.