如何检查用户是否登录了 php?

2022-08-30 09:38:46

我对PHP很陌生,我正在尝试弄清楚如何使用会话来检查并查看用户是否登录到网站,以便他们有权访问特定页面。

这是复杂的事情,还是因为我是一个菜鸟,我无法弄清楚?


答案 1

登录不是太复杂,但几乎所有登录过程都需要一些特定的部分。

首先,请确保在需要了解登录状态的所有页面上启用会话变量,方法是将以下内容放在这些页面的开头:

session_start();

接下来,当用户通过登录表单提交其用户名和密码时,您通常会通过查询包含用户名和密码信息(例如MySQL)的数据库来检查其用户名和密码。如果数据库返回匹配项,则可以设置会话变量以包含该事实。您可能还希望包含其他信息:

if (match_found_in_database()) {
    $_SESSION['loggedin'] = true;
    $_SESSION['username'] = $username; // $username coming from the form, such as $_POST['username']
                                       // something like this is optional, of course
}

然后,在取决于登录状态的页面上,放置以下内容(不要忘记):session_start()

if (isset($_SESSION['loggedin']) && $_SESSION['loggedin'] == true) {
    echo "Welcome to the member's area, " . htmlspecialchars($_SESSION['username']) . "!";
} else {
    echo "Please log in first to see this page.";
}

这些是基本组成部分。如果您需要有关SQL方面的帮助,那么网络上有很多教程。


答案 2

此页面上的几乎所有答案都依赖于检查会话变量的存在来验证用户登录。这绝对没问题,但重要的是要考虑到,如果同一裸机上有多个虚拟主机/站点,则PHP会话状态对于应用程序来说并不是唯一的。

如果您在 Web 服务器上有两个 PHP 应用程序,这两个应用程序都使用名为 “isLoggedIn” 的会话变量中的布尔标志检查用户的登录状态,则用户可以登录到其中一个应用程序,然后在没有凭据的情况下自动获得对第二个应用程序的访问权限。

我怀疑即使是最恐龙的商业共享主机也不会让虚拟主机共享相同的PHP环境,以至于这种情况可能会在多个客户的站点上发生(不再),但是在您自己的环境中需要考虑。

非常简单的解决方案是使用标识应用的会话变量,而不是布尔标志。例如 $SESSION[“isLoggedInToExample.com”]

来源:我是一名渗透测试人员,在如何做事情方面有很多经验。


推荐