用于检查活动用户状态的php mysqli会话

时间:2018-04-27 10:37:50

标签: php mysql

我尝试创建登录页面并检查用户是否处于活动状态

<?php
session_start();
$error = '';
require ( 'conn.php' );
$username = trim( $_POST['username'] );
$password = trim( $_POST['password'] );

$username = $koneksi->escape_string($username);
$password = $koneksi->escape_string($password);

$sql = "SELECT nama, role, status FROM users 
        WHERE username='$username' 
        AND password='$password' LIMIT 1";

$query = $koneksi->query($sql);

if( !$query )
{
    die( 'Oops!! Database gagal '. $koneksi->error );
}

if( $query->num_rows == 0 )
{
$error="Username atau password salah!";
}

if( $query->num_rows == 1 )
{   
    $row =$query->fetch_assoc();

    $_SESSION['nama_user'] = $row['nama']; 
    $_SESSION['akses']     = $row['role'];
    $status = $row['status'];

    if($status == 'Tidak Aktif')
    {
    $error = 'ID anda sudah dinon-aktifkan'; 
    }
    else if( $row['role'] == 'admin')
    {
    $_SESSION['saya_admin']= 'TRUE';
    header('location:'.$_SESSION['akses'].'/index.php');
    exit;
    }
    else if( $row['role'] == 'guru')
    {
    $_SESSION['saya_guru']= 'TRUE';
    header('location:'.$_SESSION['akses'].'/index.php');
    exit;
    }
    else if( $row['role'] == 'siswa')
    {
    $_SESSION['saya_siswasmp']= 'TRUE';
    header('location:'.$_SESSION['akses'].'/index.php');
    exit;
    }
    else  
    {
    # jika data yang dimaksud tidak ada
    $error = 'Username atau Password salah'; 
    }
}

if( !empty($error) )
{
$_SESSION['error'] = $error;
header('location:'.$url.'/index.php');
exit();
}
?>

一切都按预期工作,除非非活跃用户尝试登录时在浏览器上返回这样的错误

此页面无效 localhost重定向了你太多次了。 尝试清除您的Cookie。

ERR_TOO_MANY_REDIRECTS

所以有任何建议或修复来优化这个吗?

之前谢谢

编辑:

if( $query->num_rows == 1 )
{   
    $row =$query->fetch_assoc();

    $_SESSION['nama_user'] = $row['nama']; 
    $_SESSION['akses']     = $row['role'];
    $status = $row['status'];

    if($status == 'Tidak Aktif')
    {
    $error = 'ID anda sudah dinon-aktifkan';
    unset($_SESSION['akses']);
    }
    else if( $row['role'] == 'admin' && $row['status']=='Aktif')
    {
    $_SESSION['saya_admin']= 'TRUE';
    header('location:'.$_SESSION['akses'].'/index.php');
    exit;
    }
    else if( $row['role'] == 'guru' && $row['status']=='Aktif')
    {
    $_SESSION['saya_guru']= 'TRUE';
    header('location:'.$_SESSION['akses'].'/index.php');
    exit;
    }
    else if( $row['role'] == 'siswa' && $row['status']=='Aktif')
    {
    $_SESSION['saya_siswasmp']= 'TRUE';
    header('location:'.$_SESSION['akses'].'/index.php');
    exit;
    }
}

如果akses发生错误修复问题,则取消设置会话。因为index.php上的这段代码

if( isset($_SESSION['akses']) )
{
header('location:'.$_SESSION['akses']);
exit();
}

2 个答案:

答案 0 :(得分:0)

只需检查第一个if

中的会话
if( $query->num_rows == 1 && !isset($_SESSION['nama_user']) )

如果未设置意味着它是第一次,否则它将跳过重定向规则

NB我把&#34; name_user&#34;但你可以创建一个会话变量&#34; isLogged&#34;。

答案 1 :(得分:-1)

每次重定向都会重定向到相同的重定向。因为浏览器不允许无限重定向到以相同结果结束的相同代码。向用户打印错误或仅在帖子或其他内容上启动代码。