如果我只使用一次,这个语句就可以正常工作,但当我需要多次使用它时就不行了。我很好奇为什么,但更重要的是我想知道如何解决这个问题。
<?php if (isset($_SESSION['SESS_USER_ID'])) { ?>
<?php }
else {?>
<?php }
我需要根据用户是否登录来更改页面上的几个项目(菜单项、给用户的消息等)
如果我只使用一次,这个语句就可以正常工作,但当我需要多次使用它时就不行了。我很好奇为什么,但更重要的是我想知道如何解决这个问题。
<?php if (isset($_SESSION['SESS_USER_ID'])) { ?>
<?php }
else {?>
<?php }
我需要根据用户是否登录来更改页面上的几个项目(菜单项、给用户的消息等)
快速解决方法是:
<?php $logged_in = (isset($_SESSION['SESS_USER_ID'])); ?>
然后
<?php if ($logged_in) : ?>
//show secret stuff
<?php else : ?>
// show public stuff
<?php endif; ?>
但
$_SESSION
在您第一次访问和第二次访问之间出现了问题。您不小心将其设置在某处(使用=
而不是==
一种简单的方法),或者您的代码具有在幕后更改它的副作用。
为了完成你想要的,你不应该在同一个文件中混合 PHP 和 HTML 代码。
大多数当前框架都使用某种模板。如果用户已登录,则显示已登录模板。如果他不是,请显示其他模板。
有许多模板框架是免费的,例如Smarty和TWIG(仅供 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 禁止访问该文件夹。