Php 如何防止管理员登录两次?

Php 如何防止管理员登录两次?,php,sql,session,Php,Sql,Session,如果管理员已经登录,我不想向他们显示登录页面。 如果我想在管理员进入管理员登录页面时将其重定向到主页,我该怎么办。为供参考,在管理员登录后,我将header.php包含在每个管理员页面中。非常感谢你的帮助!谢谢大家! 下面显示了我的header.php编码的一部分: <?php session_start(); if(!isset($_SESSION['name']) or (!isset($_SESSION['password'])) or

如果管理员已经登录,我不想向他们显示登录页面。 如果我想在管理员进入管理员登录页面时将其重定向到主页,我该怎么办。为供参考,在管理员登录后,我将
header.php
包含在每个管理员页面中。非常感谢你的帮助!谢谢大家!

下面显示了我的
header.php
编码的一部分:

<?php             
    session_start();
    if(!isset($_SESSION['name']) or (!isset($_SESSION['password'])) 
  or $_SESSION['name'] == '' or $_SESSION['password'] == '' )       
    {
            header('Location: index.php');
    }
?>
<?php session_start(); 
  ob_start();
  include("../DBScripts/DB.php");
    $adminName = $_POST['Name'];
    $adminPassword = $_POST['Password'];
  $Security = $_POST['Security_code'];
  $hidden = $_POST['Security_required'];

    $conn = dbConnect();

    if (!$conn)
        die("Couldn't connect to MySQL");

    $query = "select * from user where usernm='$adminName' and userpw='$adminPassword'";   
    $result = mysql_query($query, $conn);   
  $row = mysql_fetch_array($result);
    if (mysql_num_rows($result) > 0 && $row['userty']== user && $Security == $hidden)
    {     
    $_SESSION['name'] = $adminName;
    $_SESSION['password'] = $adminPassword;
    header ('Location: ../Users/home_user.php');
   } 
    else if(mysql_num_rows($result) > 0 && $row['userty']== admin && $Security == $hidden)
    {
    $_SESSION['name'] = $adminName;
    $_SESSION['password'] = $adminPassword;
        header('Location: adminindex.php');
      }
    else
    {
        header('Location: index.php');
    }

?>

创建特定于管理员的新会话

登录时,当管理员登录时,设置一个新的
$\u会话['admin']=true
(与其他会话一起设置)

然后在登录页面上

if (isset($_SESSION['admin']) && $_SESSION['admin'] === true) # || is the same as the or operator
    header('Location: yournonloginpage.php');

我建议的第一件事是,您永远不希望在会话中存储密码信息。密码应仅用于验证登录操作,甚至应对此比较进行哈希处理

除此之外,你所拥有的一切都差不多了。如果用户已登录,并且您已将其用户名存储在
$\u SESSION
中,则只需测试
isset($\u SESSION['name'])
,然后根据需要重定向。只需确保实现注销功能,该功能将取消会话['name']的设置

如果我理解您的要求,您只需将其插入登录页面,并从其余页面中删除header.php:

if(isset($_SESSION['name'])){
    header("Location: index.php");
    die();
}
这将使您无法在已登录时访问登录页面。如果
$\u会话['name']
已初始化且不为空,则表示您有用户登录,否则不为空

然后,您需要提供一个注销页面,最简单的方法是在某处创建一个名为logout的链接,该链接指向logout.php,其中可能包含:

unset($_SESSION['name']);
header("Location: index.php");

如果已经创建并设置了会话,然后将用户重定向回
adminindex
页面,则需要在登录页面中进行如下检查:

session_start();
if( isset($_SESSION['name']) && $_SESSION['name'] != "" )
{
        header('Location: adminindex.php');
        die;
}

在登录页面上做相反的检查?!如果已经登录,请重定向到主页…?如果会话存在,请将管理员重定向回
adminindex
。我可以知道如何将管理员重定向回adminindex If会话吗?如果您能以代码值回答我,我将非常感激@Nil'zMay我知道如何在登录页面上执行相反的检查?你能回答我的价值代码吗。非常感谢。谢谢@deceze
&&与or运算符相同
我知道PHP不好,但肯定没那么坏?PHP不坏,只是它不是最漂亮的语言;)我只是很难协调
与or操作员的
相同。好的,我将在会话中删除密码信息。由于我对你的解释仍然很困惑,我可以得到代码值的答案吗?谢谢我在我的回答中添加了一些例子,效果很好!我会在安全登录页面上做更多的研究。谢谢我的错,重定向后需要一个
die
语句:D
session_start();
if( isset($_SESSION['name']) && $_SESSION['name'] != "" )
{
        header('Location: adminindex.php');
        die;
}