我的网站上有一个管理系统和一个用户系统。用户系统上的某些数据不会更改,但管理员数据会更改。所以我想知道是否有办法将管理会话(当他们登录时)限制在管理目录(/admin),这样它就不会干扰我网站的其余部分?
谢谢,
卢卡斯
有很多方法可以处理这样的事情。可能最简单的方法是检查权限和$_SERVER['REQUEST_URI']
,如果用户不在该admin/
区域,则重定向到该区域。
// Assuming you've saved an admin flag in session
// and the user request URI doesn't contain admin/
if ($_SESSION['admin'] === TRUE && !preg_match('/admin\//' $_SERVER['REQUEST_URI'])) {
// redirect into the admin/ area
header("Location: http://example.com/admin");
exit();
}
根据普遍的要求,这是在 admin/ 目录中强制执行管理员登录的相反操作
if ((!isset($_SESSION['admin'] || $_SESSION['admin'] === FALSE) && preg_match('/admin\//' $_SERVER['REQUEST_URI'])) {
// redirect out of the admin/ area
header("Location: http://example.com/");
exit();
}
实际上,假设管理页面是单独的脚本,您实际上并不需要preg_match()
这部分中的 。但是,如果您有一个 MVC 模式,其中管理脚本实际上可能不是从 admin 目录中的文件提供的,请使用正则表达式匹配。
这不是一个解决方案,但它是一种解决方法。您也可以为此使用相同的会话。只需在路径名称处为每个路径创建会话标识符
$_SESSION['path/to/admin']['var1'] = 'value1';
$_SESSION['path/to/admin']['var2'] = 'value2';
这样,您可以检索与路径无关的会话变量的值。
session_name
调用前使用session_start
。因为您可以区分用户和管理区域。
用户
session_name("user");
session_start();
行政
session_name("admin");
session_start();
不确定我是否完全理解了这个问题,但您始终可以检查用户是否是管理员,如果不是,只需将他们从管理员系统重定向到用户系统。