我有一个简单的登录页面,根据数据库检查凭据,然后每个页面都包括auth.php
,验证$_SESSION['logged']
设置并且会话未过期。
问题是,每个页面还包括另一个页面tab.php
(类似于菜单),我也需要限制访问,但包括tab.php
内的auth.php
使包含发生两次。如果我没有在tab.php
中包含auth.php
,但是,任何人都可以直接访问tab.php
,绕过身份验证检查,并可能检索私人信息。
有解决这种情况的最佳实践吗?
编辑:我忘了问,你用什么路径使它相对于站点根?由于auth.php
和tab.php
都在文件夹中,index.php
包含tab.php
在根目录中- include函数根据我使用的路径('./includes/auth.php'
或'./auth.php'
)给出index.php
或tab.php
的错误-如果你知道我的意思。我尝试了'/includes/auth.php',但这不起作用
在您的文件中使用include_once
而不是include
(或require_once
和require
)。这将确保您的auth.php
文件在脚本的生命周期中只包含一次。
include_once
和require_once
将确保您不会多次包含相同的文件(同时确保您已通过身份验证)。
$_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)