2

我正在学习 PHP,并且正在开发一个非常简单的带有身份验证的网站。由于我认为我不足以制作一个安全的身份验证系统(而且我没有那么多时间),我搜索并发现这个脚本http://php-login.net/似乎有效完美。我正在使用脚本的“2-advanced”版本,并且在 index.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 的内容(如果他没有登录)(在views 目录中有一个.htaccess 可以防止直接访问视图)。其他页面也以这种方式工作(例如,根目录中的registration.php 包括文件views/registration.php,其中有内容)。

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

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

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

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

4

1 回答 1

4

我首选的方法是对用户进行身份验证(但我希望,通常通过数据库中的哈希密码),然后使用会话来跟踪登录状态。然后我可以设置一个变量$_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']);

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

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

于 2013-10-22T18:07:33.873 回答