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>';
}
}
Soru hatalı mı? 👎
Eğer sorunun kurallara aykırı olduğunu düşünüyorsanız lütfen bize bildirin!
Cevaplar (4)
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.
@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>';
}
}
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']);
}