检测用户是否已登录


Detect if user is logged in

这是我导航栏中的一些编码。我正在尝试检测是否有用户登录。应该发生的是,当有用户登录时,它会显示一个小的下拉菜单,其中包含用户编辑帐户或注销的选项,但它不起作用。

            <?php
            function loggedIn(){
            $_SESSION['loggedin'] = true;
            $_SESSION['username'] = $username;
            if(isset($_SESSION['username'])!="")
            { echo '<li class="dropdown">
                    <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">'. $_SESSION['username'] .'<span class="caret"></span></a>
                   <ul class="dropdown-menu">
                        <li><a href="#">Action</a></li>
                        <li><a href="#">Another action</a></li>
                        <li><a href="#">Something else here</a></li>
                        <li role="separator" class="divider"></li>
                        <li><a href="#">Separated link</a></li>
                        <li role="separator" class="divider"></li>
                        <li><a href="#">One more separated link</a></li>
                    </ul>
                </li>';
            }else{
                echo '<li><a href="#login" data-toggle="modal" data-target="#login" id="loginbtn"><span class="glyphicon glyphicon-log-in"></span> Login</a></li>';
                }
            }
            loggedIn();
            ?>

设置$_SESSION['username']变量的那一分钟,您的测试在if(isset($_SESSION['username])=")将始终执行,因为变量已设置。对于我的登录过程,我通常有一个doLogin.php脚本,它根据数据库对用户进行身份验证,如果身份验证通过,它将设置必要的$_SESSION变量。如果失败,它将设置一个$_SESSION['loginAttemptCount']变量,并取消设置$_SESSION['username']和相关变量。

这样,每个PHP页面只需执行if(isset($_SESSION['username'])测试并相应地配置自己。

希望能有所帮助。

正常过程为:

  • 登录脚本在会话中创建一些东西

  • 想要知道用户是否已登录的脚本,请在会话中检查该值。

login.php

<?php
session_start();
// do all your login checks for userid / password
$_SESSION['username'] = $username;
. . . .

any_other.php

<?php
    session_start();
    function AddForLoggedInUsers(){
        if( !empty($_SESSION['username']) ) { 
           $htm = '<li class="dropdown">
                <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">'. $_SESSION['username'] .'<span class="caret"></span></a>
               <ul class="dropdown-menu">
                    <li><a href="#">Action</a></li>
                    <li><a href="#">Another action</a></li>
                    <li><a href="#">Something else here</a></li>
                    <li role="separator" class="divider"></li>
                    <li><a href="#">Separated link</a></li>
                    <li role="separator" class="divider"></li>
                    <li><a href="#">One more separated link</a></li>
                </ul>
            </li>';
        }else{
            $htm = '<li><a href="#login" data-toggle="modal" data-target="#login" id="loginbtn"><span class="glyphicon glyphicon-log-in"></span> Login</a></li>';
        }
        return $htm;
    }
    // other code
    echo AddForLoggedInUsers();

将您在函数中生成的html放入变量中也是一个更好的主意,然后当您调用函数时,您可以选择添加到函数结果中,或者直接回显它,甚至可能修改它。