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

时间:2011-11-18 01:20:30

标签: php html session

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

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

4 个答案:

答案 0 :(得分:1)

您可以控制会话,以便选择要检查的内容。

$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; ?>

答案 1 :(得分:1)

只需在脚本中使用if语句

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

就保持清洁而言,你真的应该尝试尽可能地分离你的html和php。如果有大量数据依赖于登录才能显示,您可能更愿意将其分开并改为使用include。这将有助于使事情变得更加清洁。

答案 2 :(得分:1)

Kai有这个想法,在视图中使用更清晰的if变体来回答他的回答。

作为对他的想法的一个小改进,我会 define a named constant:或创建一个用户对象来访问用户的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对象。

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

答案 3 :(得分:0)

我使用MVC框架(Zend Framework),并为每个控制器提供User对象。一旦用户登录,我将标志设置为true,因此仅向登录用户显示受限内容非常简单: - &gt;

//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框架中的视图对象。