v2.5.2
Giriş yap

PHP Session'a timeout nasıl verebilirim?

alibartuuzuner
644 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;
		}
	}
}
PHP

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>';
	}
}
PHP
Cevap yaz
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Cevaplar (4)
rephp7
1381 gün önce

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

fazilmertvural
1381 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");
    }
}
PHP

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
PHP

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();
   }
PHP

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

alibartuuzuner
1381 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']);
	}
PHP

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>';
		}
	}
PHP
sercanarga
1381 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']);
}
PHP