v2.5.2
Giriş yap

PHP Session'a timeout nasıl verebilirim?

alibartuuzuner
600 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>';
	}
}
Cevap yaz
Cevaplar (4)
rephp7
1248 gün önce

@fazilmertvural,
yazdığınız kodu PDO olarakta yeni bir başlıkta paylaşmanız mümkün mü?

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.

alibartuuzuner
1248 gün önce

@sercanaga , demek istediğini pek anlamadım ama sanırım böyle olucak;

functions.php

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

				break;
			}
		}
	}

	if ((time() - $_SESSION['login']['login_date']) > (60 * 30)) {
		unset($_SESSION['login']);
	}

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;
			$_SESSION['login'] = ['login_date' => time()];

			echo "<script> window.location.replace('index') </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>';
		}
	}
sercanarga
1249 gün önce

Aslında bu tür bir şey için cookie tutman daha mantıklı ama session ile yapman istersen;

Session değerinde kullanıcının giriş yaptığı zamanı tutup karşılaştırabilirsin.
Aşağıdaki örnekte 30 dakika sonra session siliniyor.

$_SESSION['login'] = ['login_date' => time()];

if ((time() - $_SESSION['login']['login_date']) > (60 * 30)) {
    unset($_SESSION['login']);
}