我有一个简单的登录页面,用于检查数据库的凭据,然后每个页面都包含auth.php
,用于验证$_SESSION['logged']
已设置且该会话未过期。
问题是,每个页面还包含另一个页面tab.php
(类似于菜单),我还需要限制访问权限,但auth.php
内包含tab.php
会使包含发生两次。但是,如果我在auth.php
中未包含tab.php
,则任何人都可以直接访问tab.php
绕过身份验证检查并可能检索私人信息。
解决这种情况的最佳做法是什么?
编辑:
我忘了问,但你使用什么路径使它相对于网站根?由于auth.php
和tab.php
都在文件夹中,并且包含index.php
的{{1}}位于根目录中,因此include函数会为tab.php
或{{index.php
提供错误1}}根据我使用的路径(tab.php
或'./includes/auth.php'
) - 如果你知道我的意思。我试过'/includes/auth.php',但这不起作用。
答案 0 :(得分:1)
在您的文件中使用include_once
代替include
(或require_once
和require
)。这将确保您的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_once
和require_once
肯定会确保您不会多次包含相同的文件(同时确保您已通过身份验证)。
但是,我要做的是将您的包含添加到“include”文件夹中,并禁止访问 - 通过htaccess文件手动键入路径的用户。通过这种方式,您可以将您的包含保存在一个位置(无论您的标头包含的内容如何),并使您的包含文件保持干净且仍然无法触及。如果你这样做,你只需要按照上面的答案中提到的那样做,并检查你的$_SESSION['logged']
是否已设定(以及你需要的其他检查)