PHP认证最佳实践


php authentication best practice...?

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

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

有解决这种情况的最佳实践吗?

编辑:

我忘了问,你用什么路径使它相对于站点根?由于auth.phptab.php都在文件夹中,index.php包含tab.php在根目录中- include函数根据我使用的路径('./includes/auth.php''./auth.php')给出index.phptab.php的错误-如果你知道我的意思。我尝试了'/includes/auth.php',但这不起作用

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

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

然而,我要做的是,将你的include添加到一个"include"文件夹中,并禁止通过htaccess文件访问——那些手动输入路径的人。通过这种方式,您可以将包含文件保存在一个地方(无论您的头包含文件是什么样子),并保持包含文件的干净,并且仍然无法触及。如果你要这样做,你只需要做jan在上面的答案中提到的,检查你的$_SESSION['logged']是否设置(以及你需要的任何其他检查)

请检查tab.php是否初始化会话并且$_SESSION['logged']为真。如果首先加载auth.php,这将正常工作。

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

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