好的,所以我看到了几种不同的方法来重定向用户,例如,当他们没有登录,或者不允许查看页面,并决定重定向时。
我来布置场景。。。比方说,当用户提供了正确的用户名和密码时,就会创建会话变量$_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
就我个人而言,我一直采用第一种方法。我认为这是因为代码似乎很好地"被困"在括号里(也许我只是喜欢这样看,哈哈)。
但我很想知道示例2是否可以永远让Danger Jim看到内容。
我认为这是一个很好的问题,所以我会尽力给出一个好的答案!
这两个例子都会起作用,最大的区别是在第一个例子中看起来确实更安全。但两者都做同样的事情。在第一个例子中,你只需要考虑一件事:
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();
之后,页面将关闭,因此使用第二个示例不会有"真正的"危险。如果你想要更多的细节,如果你还没有阅读标题手册,你应该阅读。
祝你的代码好运,我希望我们stackoverflow能帮助你成为一名更好的程序员。他们帮了我很多:)
p.s.抱歉我的英语不好