0

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

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

我需要根据用户是否登录来更改页面上的几个项目(菜单项、给用户的消息等)

4

2 回答 2

1

快速解决方法是:

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

然后

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

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

于 2012-12-14T19:33:55.257 回答
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 禁止访问该文件夹。

于 2012-12-14T19:40:46.487 回答