PHP Session'a timeout nasıl verebilirim?
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>';
}
}
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.