我有一个管理系统和我的网站上的用户系统。用户系统上的某些数据不会更改,但管理员数据会更改。所以我想知道是否有一种方法可以限制管理会话(当他们登录时)仅限于管理目录(/admin),这样它就不会干扰我网站的其余部分?
谢谢,
卢卡斯
发布于 2012-04-08 12:41:02
有很多方法可以处理这样的事情。可能最简单的方法是检查权限和$_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/目录中强制使用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脚本实际上不是从admin目录中的文件提供的,则使用regex匹配。
发布于 2012-04-08 12:43:11
这不是一种解决方案,但它是一种变通方法。您也可以使用相同的会话来完成此任务。只需在路径名处为每个路径创建会话标识符,如下所示
$_SESSION['path/to/admin']['var1'] = 'value1';
$_SESSION['path/to/admin']['var2'] = 'value2';
这样,您可以检索与路径无关的会话变量的值。
发布于 2012-04-08 12:47:26
在调用session_start
之前使用session_name
。因为您可以区分用户区域和管理员区域。
user(“user”);session_start();
admin(“session_name”);admin
https://stackoverflow.com/questions/10062829
复制相似问题