0

我的网站上有一个管理系统和一个用户系统。用户系统上的某些数据不会更改,但管理员数据会更改。所以我想知道是否有办法将管理会话(当他们登录时)限制在管理目录(/admin),这样它就不会干扰我网站的其余部分?

谢谢,

卢卡斯

4

4 回答 4

1

有很多方法可以处理这样的事情。可能最简单的方法是检查权限和$_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 目录中的文件提供的,请使用正则表达式匹配。

于 2012-04-08T12:41:01.900 回答
1

这不是一个解决方案,但它是一种解决方法。您也可以为此使用相同的会话。只需在路径名称处为每个路径创建会话标识符

$_SESSION['path/to/admin']['var1'] = 'value1';
$_SESSION['path/to/admin']['var2'] = 'value2';

这样,您可以检索与路径无关的会话变量的值。

于 2012-04-08T12:43:11.247 回答
1

session_name调用前使用session_start。因为您可以区分用户和管理区域。

  • 用户

    session_name("user");
    session_start();
    
  • 行政

    session_name("admin");
    session_start();
    
于 2012-04-08T12:47:25.533 回答
0

不确定我是否完全理解了这个问题,但您始终可以检查用户是否是管理员,如果不是,只需将他们从管理员系统重定向到用户系统。

于 2012-04-08T12:40:03.397 回答