好的,所以我看到了几种不同的方法来重定向用户,例如,他们没有登录,或者不允许查看页面,并决定重定向。
我将设置场景......假设用户提供了正确的用户名和密码,则会创建会话变量$_SESSION['loggedin']
。现在,当该用户转到logged_in_users_only.php
时,他可以愉快地看到该页面。但是,还有Danger Jim,他还没有登录,然后前往logged_in_users_only.php
并被重定向回主页(可能会发出警告)
因此。这是我见过的两种主要方法,并且想知道其中任何一种是否具有安全隐患,或者可能以某种方式允许Danger Jim看到logged_in_users_only.php
页面
示例1
if(session_status()==PHP_SESSION_NONE) {
session_start();
}
if(isset($_SESSION['loggedin'])) {
//show content
} else {
header('Location: home.php');
exit;
}
示例2
if(session_status()==PHP_SESSION_NONE) {
session_start();
}
if(!isset($_SESSION['loggedin'])) {
header('Location: home.php');
exit;
}
//show content
就个人而言,我总是采用第一种方法。我认为这是因为代码似乎很好地被困在了#39;括号内(也许我只是喜欢用那种方式看着它)。
但我很想知道示例2是否从不让Danger Jim看到内容。
答案 0 :(得分:1)
我认为这是一个非常好的问题所以我会尽力给出一个好的答案!
这两个例子都有效,最大的区别在于它在第一个例子中确实看起来更安全。但两者都做同样的事情。 在第一个例子中,您只需要考虑一件事:
if(session_status()==PHP_SESSION_NONE) {
session_start();
}
if(isset($_SESSION['loggedin'])) {
echo "logged in!";
} else {
header('Location: home.php');
Exit;
}
您必须回复所有内容。某些IDE不支持PHP echo函数内的HTML着色。
我个人使用第二个例子,因为我的IDE不支持PHP字符串中的代码着色。
if(session_status()==PHP_SESSION_NONE) {
session_start();
}
if(!isset($_SESSION['loggedin'])) {
header('Location: home.php');
Exit;
}
在header();
之后,该页面已关闭,因此没有真正的'使用第二个例子的危险。
如果您想了解更多详情,请阅读header manual,如果您还没有。
祝你的代码好运,我希望我们在stackoverflow帮你成为一个更好的程序员。他们给了我很多帮助:)。
P.S。抱歉我的英文不好