2013-10-22 84 views
2

我在学习PHP,我正在开发一个带有身份验证的非常简单的网站。由于我认为自己没有足够的优势来建立一个安全的身份验证系统(并且无论如何我没有那么多时间),所以我搜索并发现了这个脚本http://php-login.net/,它似乎很完美。 我使用的脚本的“2-高级”版本,并在index.php文件中有这样的事情: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)。其他页面也以这种方式工作(例如,根目录中的registration.php包含其中包含内容的文件views/registration.php)。

因此,这里是我的问题:是不是更方便做这样或那样(至少在指数)做只是一个查看和控制单个元素像这样的东西

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

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

P.S .:我不明白我是否可以对SO做出“最好的方式”问题,如果我做不到,我下次不会。

回答

4

我的首选方法是验证用户(但我希望,通常是通过数据库中的哈希密码),然后使用会话来跟踪登录状态。然后,我可以设置一个变量,如$_SESSION['loggedIn'] = true;,然后在随后调用脚本时测试该变量。

E.g.

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']); 

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

如果你现在有什么感觉方便,满足你的需求,那么你很好。

+0

感谢您的回答。 我认为你说的基本上和使用该函数相同,因为在“login”类中,'isUserLoggedIn()'函数使用一个带有$ _SESSION ['logged_in']标志的php会话。我更喜欢使用这个类,因为对我来说更容易,而且它还做了很多其他的事情,比如密码哈希,数据库连接和记忆我的cookie本身。 我想我会使用include()版本,因为它让事情更“干净”和有组织。 –