不确定是否正确使用isset


Not sure if using isset correctly

我正在建立一个网站,当用户已经登录时,即会话处于活动状态时,该网站不得显示登录选项。我已经尝试过处理这个问题,但它没有返回所需的输出。请帮忙。谢谢

<?php
    if(!isset($_SESSION)) {echo "<li><a href='Employee.php'>Login</a></li>";}
                ?>

编辑:我添加了从数据库中检查登录详细信息并启动会话的部分。

 $query = "SELECT Cust_FName from customer where Cust_ID='$name' and  Password='$pass'";

$result = mysqli_query($con, $query);
if(mysqli_num_rows($result)!= false)
{
$row = mysqli_fetch_row($result);
echo row[0];
if(mysqli_num_rows($result) > 0)
{
echo "Logged in!";
session_start();
$_SESSION['userName'] = $row[0];
header("Location: index.php");

}

}

如果您想检查会话是否启动,可以使用

if(session_status() != PHP_SESSION_ACTIVE) {
    echo "<li><a href='Employee.php'>Login</a></li>";
}

问题是,如果用户没有登录,会话也会出现。你必须检查是否设置了例如$_SESSION['user_id']

if(!isset($_SESSION['user_id']) {
    echo "<li><a href='Employee.php'>Login</a></li>";
}

在我的示例中,$_SESSION['user_id']将在用户登录成功时填写。

问题

根据您的评论:

登录按钮应该只在用户没有登录时显示,一旦登录,它就会消失。

解决方案

// This would be your login.php page
<?php
    session_start();
    // process your HTML form, like this
    if(isset($_POST['login'])){
        // Remember: always validate your form inputs
        $name = $_POST['name'];
        $pass = $_POST['pass'];
        $query = "SELECT Cust_FName from customer where Cust_ID='$name' and  Password='$pass'";
        $result = mysqli_query($con, $query);
        if(mysqli_num_rows($result)!= false){
            $row = mysqli_fetch_row($result);
            //echo row[0];
            if(mysqli_num_rows($result) > 0){
                //echo "Logged in!";
                $_SESSION['userName'] = $row[0];
                header("Location: index.php");
                exit(); // exit() is necessary, otherwise the script execution is not terminated. Setting header alone is not enough to redirect.
            }
        }
    }
    if(isset($_SESSION['userName'])){
        // user is already logged in
        // redirect the user to a different page
        // header("Location: index.php");
        // exit();
    }else{
        // user is not logged in
        // display login option
        ?>
        <!--Your HTML form for login-->
        <form action="login.php" method="POST">
            <input type="text" name="name" value="" /><br />
            <input type="text" name="pass" value="" /><br />
            <input type="submit" name="login" value="Login" />
        </form>
        <?php
    }
?>

编辑:

会话是一个驻留在服务器中的文件,在该文件中我们可以存储任意数量的信息。我们通常在客户端的浏览器上部署会话cookie。

在输出任何HTML或空白之前,我们需要开始我们的会话

当我们这样做的时候,

<?php
    session_start();
?> 

它会说,转到浏览器,获取会话id并打开相应的文件,如果没有找到任何会话id,它将启动一个新的会话。用户只能看到会话id,其他什么都看不到。

提示:记得不时清理会话

放入登录页面

<?php
session_start();
// Store Session Data
$_SESSION['login_user']= $username;  // Initializing Session
?>

当你必须检查时,使用

<?php
session_start();
// Store Session Data
if(isset($_SESSION['login_user'])){
    //do things
}
?>

以及在退出时

<?php
session_destroy();
?>