如果if(isset($ _ SESSION ['SESS_USER_ID']))需要多个if / else语句,则会出现问题

时间:2012-12-14 19:31:34

标签: php if-statement isset

如果我只使用一次,这个说法可以正常工作,但是当我需要多次使用时,这个说法不行。我很好奇为什么,但更重要的是我想知道如何解决这个问题。

<?php if (isset($_SESSION['SESS_USER_ID'])) { ?>         
<?php }  
else {?>
<?php } 

我需要更改页面上的几个项目,具体取决于用户是否已登录(菜单项,给用户的消息等)

2 个答案:

答案 0 :(得分:1)

快速解决这个问题:

<?php $logged_in = (isset($_SESSION['SESS_USER_ID'])); ?>

然后

<?php if ($logged_in) : ?>
   //show secret stuff
<?php else : ?>
   // show public stuff
<?php endif; ?>

BUT

第一次访问$_SESSION和第二次访问时出现问题。您不小心将其设置在某处(使用=而不是==是一种简单的方法),或者您的代码具有在幕后更改它的副作用。

答案 1 :(得分:1)

要完成你想要的,你不应该在同一个文件中混合使用PHP和HTML代码。

目前大多数框架都使用某种模板。如果用户已登录,则显示登录模板。如果不是,请展示其他模板。

有许多免费提供的模板框架,例如SmartyTWIG(仅供Symfony使用)。

如果您不想使用这些,您应该考虑将代码拆分为不同的文件,仍然是这样的:

<html>
[...]
    <body>
    [...]
        <?php 
            if (isset($_SESSION["SESS_USER_ID"])) {
                include("restricted_folder/file_i_want_my_logged_in_user_to_see.php");
            } else {
                include("login_required.php");
            }
        ?>
    [...]
    </body>
</html>

请记住让“restricted_folder”无法供用户直接访问,要么删除访问权限(chmod'ing文件夹应该这样做),要么编写.htaccess禁止访问该文件夹。

相关问题