PHP 登录:在登录用户和未登录用户之间显示不同内容的最佳方式


PHP login: best way to show different contents between logged-in and not logged users

我正在学习PHP,并且正在开发一个非常简单的身份验证网站。由于我认为我不够好,无法制作安全的身份验证系统(无论如何我没有那么多时间),我搜索并找到了这个脚本 http://php-login.net/似乎可以完美运行。我正在使用脚本的"2-advanced"版本,在索引.php文件中有这样的内容:

<?php
// load php-login components
require_once("php-login.php");
// create a login object. when this object is created, it will do all login/logout stuff automatically
// so this single line handles the entire login process.
$login = new Login();
// ... ask if we are logged in here:
if ($login->isUserLoggedIn() == true) {
    include("views/logged_in.php");
} else {
    include("views/not_logged_in.php");
}

因此,如果用户已登录,则会显示logged_in.php的内容,如果他未登录,则显示not_logged_in.php的内容(在视图目录中有一个.htaccess,可阻止直接访问视图)。其他页面也以这种方式工作(例如注册.php根目录中包括文件视图/注册.php其中有内容)。

所以我的问题是:这样做更方便还是(至少对于索引)只做一个视图并用这样的东西控制单个元素

if ($login->isUserLoggedIn() == true) { echo "you are logged in"
} else {echo "login form" }

对于需要的每个元素?我认为对于客户端来说,它基本上是相同的,但在服务器端我不知道,因为我是初学者,我想问一下。我很抱歉我的英语,但我希望你能理解。

PS:我不明白我是否可以在SO上提出"什么是最好的方法"问题,如果我不能,我很抱歉,下次我不会。

我的首选方法是对用户进行身份验证(无论我愿意,通常通过数据库中的散列密码),然后使用会话来跟踪登录状态。 然后,我可以设置一个像 $_SESSION['loggedIn'] = true; 这样的变量,然后在对脚本的后续调用中对其进行测试。

例如

if(isset($_SESSION['loggedIn'] && $_SESSION['loggedIn'] == true)) {
    //Redirect to welcome page
} else {
    //Redirect to other page for users that are not logged in
}

如果用户单击链接以注销,我可以简单地取消设置标志。

unset($_SESSION['loggedIn']);

基本上,根据您的需求(包括安全性),您可能有几种不同的方法可以做到这一点。 不过,对我来说,我使用存储在数据库中的散列密码对用户进行身份验证,然后使用会话变量跟踪用户的登录状态。

如果您现在拥有的东西感觉方便并满足您的需求,那么您就可以开始了。