根据用户是否登录显示对象


Displaying objects based on if a user is logged in or not

我正在学习在我的网站上进行用户身份验证的PHP会话。我知道如何使用会话限制查看完整的页面(只需检查'uid'会话变量是否设置,如果设置了,则显示内容,如果没有重定向到错误)。

然而,我试图找出最好的方法来选择性地显示和隐藏不同的对象(div,文本,图像)基于用户是否登录。它是否像检查"uid"会话变量一样简单,并根据它是否设置显示?有没有更有效的方法来处理这个问题页面上有很多条件元素?

你可以控制会话,这样你可以选择检查什么。

$logged = isset($_SESSION['uid']);

则HTML条件:

<?php if($logged): ?>
<div>logged in content</div>
<?php endif; ?>

或不存储临时变量:

<?php if(isset($_SESSION['uid'])): ?>
<div>logged in content</div>
<?php endif; ?>

在脚本中使用if语句

<?
    if(isset($_SESSION['uid'])){
?>
<div>
...
</div>
<?
    }
?>

为了保持整洁,你真的应该尽可能地把html和php分开。如果有很多数据需要登录才能显示,您可能更喜欢将其分离出来并使用include代替。

Kai有这个想法,他在视图中使用了更干净的if变体。

作为对他的想法的一个小改进,我将定义一个命名常量:或创建一个用户对象来访问用户的logged_in状态应用程序范围。

下面是Kai使用命名常量的想法:

if(isset($_SESSION['uid'])){
  define("LOGGED_IN", 1);
}else{
  define("LOGGED_IN", 0);   
}

然后在你的视图/输出中:

<?php if(LOGGED_IN): ?>
  <div>logged in content</div>
<?php endif; ?>

唯一的区别是LOGGED_IN可以在函数、类和任何地方访问。

最后但并非最不重要的是,如果您熟悉OO风格,创建一个像vascowhite这样的$user对象似乎意味着,这是我在我的项目中实现登录状态的方式。在他的例子中,$this是我引用的$user对象。

快乐编码,祝你好运的朋友。

我使用MVC框架(Zend框架),并为每个控制器提供一个User对象。用户登录后,我将标志设置为true,因此仅向登录的用户显示受限制的内容就像这样简单:->

//content for everybody
<?php if($this->user->isLoggedIn()):?>
//top secret stuff for logged in users only
<p>Only logged in users see this</p>
<?php endif; ?>
编辑:

只是为了弄清楚;$this为MVC框架中的视图对象