我正在学习在我的网站上进行用户身份验证的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框架中的视图对象