php身份验证最佳实践......?

时间:2011-11-01 13:01:40

标签: php security authentication

我有一个简单的登录页面,用于检查数据库的凭据,然后每个页面都包含auth.php,用于验证$_SESSION['logged']已设置且该会话未过期。

问题是,每个页面还包含另一个页面tab.php(类似于菜单),我还需要限制访问权限,但auth.php内包含tab.php会使包含发生两次。但是,如果我在auth.php中未包含tab.php,则任何人都可以直接访问tab.php绕过身份验证检查并可能检索私人信息。

解决这种情况的最佳做法是什么?

编辑:

我忘了问,但你使用什么路径使它相对于网站根?由于auth.phptab.php都在文件夹中,并且包含index.php的{​​{1}}位于根目录中,因此include函数会为tab.php或{{index.php提供错误1}}根据我使用的路径(tab.php'./includes/auth.php') - 如果你知道我的意思。我试过'/includes/auth.php',但这不起作用。

5 个答案:

答案 0 :(得分:1)

在您的文件中使用include_once代替include(或require_oncerequire)。这将确保您的auth.php文件仅在脚本的生命周期中包含一次。

答案 1 :(得分:0)

如果会话已初始化并且$ _SESSION ['logged']为true,则只需检入tab.php。如果首先加载auth.php,这将正常工作。

答案 2 :(得分:0)

使用require_once("auth.php");怎么样?这可以确保包含auth.php(否则应用程序将停止),但只包含一次文件,这似乎是您的目标。

答案 3 :(得分:0)

尝试include_once()。见(http://php.net/manual/en/function.include-once.php

答案 4 :(得分:0)

include_oncerequire_once肯定会确保您不会多次包含相同的文件(同时确保您已通过身份验证)。

但是,我要做的是将您的包含添加到“include”文件夹中,并禁止访问 - 通过htaccess文件手动键入路径的用户。通过这种方式,您可以将您的包含保存在一个位置(无论您的标头包含的内容如何),并使您的包含文件保持干净且仍然无法触及。如果你这样做,你只需要按照上面的答案中提到的那样做,并检查你的$_SESSION['logged']是否已设定(以及你需要的其他检查)