我尝试创建登录页面并检查用户是否处于活动状态
<?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();
}
答案 0 :(得分:0)
只需检查第一个if
中的会话if( $query->num_rows == 1 && !isset($_SESSION['nama_user']) )
如果未设置意味着它是第一次,否则它将跳过重定向规则
NB我把&#34; name_user&#34;但你可以创建一个会话变量&#34; isLogged&#34;。
答案 1 :(得分:-1)
每次重定向都会重定向到相同的重定向。因为浏览器不允许无限重定向到以相同结果结束的相同代码。向用户打印错误或仅在帖子或其他内容上启动代码。