如何在用户登录时才显示元素?


How can I display an element only if user is logged in?

我试图只在用户登录时显示div,因此只有当$_SESSION['MM_Username']存在并且等于某些东西时,为了实现这一点,我提出了以下代码。设置了会话变量,我知道它们存在,但是当我退出时,我仍然看到div:

<ul id="example-1" class="sticklr" style="list-style:none;display:<?php if ($_SESSION['MM_Username']=='' & $_SESSION['MM_Username']==NULL){echo('none');}?>">

我如何调试这个,看看是什么问题,或者如果有人知道一个更好的方法来显示一个div只有当用户登录请让我知道。

检查变量是否在PHP中设置,您可以使用isset()函数:

<?php
//this checks to see if the variable isset and not null, if it is not set or is null then echo 'none';
if (!isset($_SESSION['MM_Username']) || empty($_SESSION['MM_Username'])){
    echo 'none';
}
?>

empty()检查是否存在与变量关联的值:http://php.net/empty

如果一个变量已经被unset()取消设置,它将不再被设置。如果测试的变量被设置为,isset()将返回FALSENULL。还要注意,NULL字节("'0")不等同于PHP零常数。

来源:http://php.net/isset

关于isset()的一个很酷的事情是,当您询问是否设置了未设置的变量时,它不会抛出错误或警告消息。

几个问题:1. 你应该对if语句使用|| (OR)运算符(这可能是问题的根源,因为这个if语句总是返回false…)不能同时是空字符串和null)2. 如果这个块包含任何类型的安全信息,你应该把它全部删除,而不是仅仅用css

隐藏它。

在用户登录成功后注册一个布尔值为True的会话

例:$ _SESSION[‘userLogin] = TRUE;

你可以显示你的元素如下,

    <ul id="example-1" class="sticklr" style="<?php if($_SESSION['userLogin']) echo 'display:block;'; else 'display:none;'?>">

当用户注销时给会话赋FALSE值

$ _SESSION[‘userLogin] = FALSE;

将测试条件设置为脚本开头的一个变量:

$isLoggedIn = isset($_SESSION['MM_Username']);

然后用if:

<?php if (isLoggedIn) { ?>
<ul></ul>
<?php } ?>

注销时使用session_destroy还是unset($_SESSION['MM_Username']) ?

我想这会对你有帮助。

我会用不同的方式来处理这个问题。如果会话变量不为空,我只显示<ul> 。例如:

<?php if( !is_null($_SESSION['MM_Username']) ): ?>
<ul id="example-1" class="sticklr" style="list-style:none;">
  <!-- ... -->
</ul>
<?php endif ?>