重定向未经身份验证的用户时的PHP最佳做法

时间:2015-02-10 18:35:23

标签: php session redirect

好的,所以我看到了几种不同的方法来重定向用户,例如,他们没有登录,或者不允许查看页面,并决定重定向。

我将设置场景......假设用户提供了正确的用户名和密码,则会创建会话变量$_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看到内容。

1 个答案:

答案 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。抱歉我的英文不好