Php 我应该重定向到登录页面还是包括它

Php 我应该重定向到登录页面还是包括它,php,login,Php,Login,我正在编写一个只需要用户登录某些页面的web应用程序。我注意到很多网站做了两件事中的一件: 将他们的用户重定向到他们的登录页面,在他们的页面上有一个简单的登录检查功能,要求他们的用户登录 告诉他们的用户通过提供错误页面来访问登录页面 有一件事我没见过这么多,那就是在check函数中包含登录页面,当它说用户没有登录或者没有提交他们的凭证时,它就包含login.php文件并终止脚本,所以不会打印其他内容 因此,它显示的不是website.com/login,而是website.com/somepag

我正在编写一个只需要用户登录某些页面的web应用程序。我注意到很多网站做了两件事中的一件:

将他们的用户重定向到他们的登录页面,在他们的页面上有一个简单的登录检查功能,要求他们的用户登录

告诉他们的用户通过提供错误页面来访问登录页面

有一件事我没见过这么多,那就是在check函数中包含登录页面,当它说用户没有登录或者没有提交他们的凭证时,它就包含login.php文件并终止脚本,所以不会打印其他内容

因此,它显示的不是website.com/login,而是website.com/somepage,该页面显示的是登录名


我遵循了一个使用此方法的教程,使用此方法的安全风险是什么?

在检查会话阵列是否缺少成功登录的证据时,重定向if

session_start();
if (isset($_SESSION['login']){
    if (!$_SESSION['login']){
        header('Location: login.php');
    }
}
当然,您可以将登录尝试的代码作为此方法的替代方法。这只不过是你头脑中的敏捷和肮脏,不应该被视为最佳实践

在页面上包含代码是很好的,但是,请仔细判断它的使用。通过使用登录,假定您试图保护敏感信息免受窥探,或确保用户被发送到特定路径。通过报头重定向用户通常更安全,这样就不会向用户透露任何数据

使用这种方法有什么安全风险

安全风险存在于某些东西不安全的时候。一种方法通常不存在安全问题,而是更多地存在于代码本身。 只要你的代码很紧,而且他们没有办法绕过代码或欺骗你的登录,那么我看不出有什么问题

因此,只要您的代码100%确定其登录状态,那么您的代码就可以简单地执行if/else: 检查他们是否已登录,如果是,则显示内容,否则在该页面上显示登录表单或登录页面的链接

这样他们就永远无法访问敏感数据。IF/ELSE在保存敏感数据的页面上的安全性与在您进行重定向的另一页面上的安全性一样,无论哪种方式,他们是否获得代码完全取决于您确认其登录状态的安全性

重定向看起来有点苛刻,如果它只有几页。自动重定向到登录页面通常是为了防止某人进入一个大的部分,而不是一个或几个页面

只需保持需要登录的页面的代码干净,也就是说,没有登录表单和表单检查代码都在同一页面中,这是用于其他ie内容的。 如果您不决定将它们重定向到一个页面脚本,该脚本的目的是操作和控制登录,那么至少要包含一个单独的文件,如果认为它们没有登录,则可以执行所有这些操作,但最好是执行一个类,或者至少执行一个函数


无论您选择上述哪种方法,请确保登录表单和代码位于可重复使用代码的单独指定区域。

您的问题有些含糊不清。你有写过的代码吗?也许这可以让我们从某个地方开始。这就是我一直在想的,我只是想听听别人的意见。我的登录验证是一个包含session.php的文件,如果它看到您没有登录,那么它包含login.php,并在登录后立即终止。