v2.5.2
Giriş yap

PHP Session'a timeout nasıl verebilirim?

alibartuuzuner
601 defa görüntülendi ve 2 kişi tarafından değerlendirildi

PHP Session'a timeout vermek istiyorum yani bir zaman sonra session otomatik sonlandırılsın.

Session oluşturma kodlarım aşağıdakilerdir

functions.php

function loginControl($loginStatus = false) {
	switch($loginStatus)
	{
		case false: {
			if(trim($_SESSION['login'])) {
				header('Location: login.php');
			}
			
			break;
		}
		
		case true: {
			if(!trim($_SESSION['login'])) {
				header('Location: login.php');
			}

			break;
		}
	}
}

login.php

if(isset($_POST['login'])) { 
	$username = mysqli_real_escape_string($connection, $_POST['username']);
	$password = $_POST['password'];
	
	$pwmd5 = md5($password);

	$GETpassword = mysqli_query($connection,"SELECT * from accounts where username='$username' and password='$pwmd5'");
	$QUERYpassword = mysqli_num_rows($GETpassword);

	if($QUERYpassword >= 1) {
		$_SESSION['login'] = $username;
		echo "<script> window.location.replace('index.php') </script>";
	}
	else {
		echo '<div class="alert alert-danger p-1 fw-bold" role="alert"><div class="container text-center"><i class="far fa-info-circle"></i> Şifre veya Kullanıcı Adı yanlış!</div></div>';
	}
}
fazilmertvural
1248 gün önce

Konu dışı farklı bir konuya değineceğim, aşağıdaki kod çok sağlıklı görünmüyor. md5 ile şifrelemeyi query parantezi içerisinde yapabilirsin.
Buna ek olarak if(isset($_POST['login'])) yazdığın kodda butona tıklanıp tıklanmama kontrolü yapmışsın, bunun yerine http olaylarını takip eden REQUEST_METHOD daha sağlıklı olur.
İstersen bu şekilde de kullanabilirsin.

login.php

include("config.php");
session_start();
if($_SERVER["REQUEST_METHOD"] == "POST") 
{
    $username = mysqli_real_escape_string($connection,$_POST['username']);
    $password = mysqli_real_escape_string($connection,$_POST['password']); 

    $query = mysqli_query($connection,"SELECT * FROM accounts WHERE username='$username' AND password = md5('$password')");
    $row = mysqli_fetch_array($query,MYSQLI_ASSOC);
    $count = mysqli_num_rows($query);

    if($count == 1) 
    {
        $_SESSION['SUCCES'] = $username;
        header("location:index");
    }
    else
    {
        header("location:error");
    }
}

config.php

$connectiom = mysqli_connect("db_host", "db_username", "db_password", "db_dbname"); // veritabanı bağlantısı
mysqli_query($db,"SET NAMES 'UTF8MB4' "); // php yolu ile veri ekleme veya güncelleme işlemlerinde eklenen verilerin, veritabanına Türkçe şekilde kayıt yapmasını sağlamak
date_default_timezone_set('Europe/Istanbul'); // php ile tarih saat işlemlerinde kullandığımız Türkiye saati fonksiyonu

session.php

   include("config.php");
   session_start();

   $online = $_SESSION['SUCCES'];
   $ses_sql = mysqli_query($db,"SELECT * FROM accounts WHERE username = '$online' ");
   $row = mysqli_fetch_array($ses_sql,MYSQLI_ASSOC);
   $login_session = $row['username'];

   if(!isset($_SESSION['SUCCES']))
   {
      header("location:login");
      die();
   }

Tabi geliştirilebilir ama bunun en sağlıklı login methodu budur.