首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在PHP中仅限制一个目录的会话?

如何在PHP中仅限制一个目录的会话?
EN

Stack Overflow用户
提问于 2012-04-08 20:34:42
回答 4查看 1.5K关注 0票数 0

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

谢谢,

卢卡斯

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-04-08 20:41:02

有很多方法可以处理这样的事情。可能最简单的方法是检查权限和$_SERVER['REQUEST_URI'],如果用户不在admin/区域,则重定向到该区域。

代码语言:javascript
运行
复制
// 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登录的情况相反

代码语言:javascript
运行
复制
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匹配。

票数 1
EN

Stack Overflow用户

发布于 2012-04-08 20:43:11

这不是一种解决方案,但它是一种变通方法。您也可以使用相同的会话来完成此任务。只需在路径名处为每个路径创建会话标识符,如下所示

代码语言:javascript
运行
复制
$_SESSION['path/to/admin']['var1'] = 'value1';
$_SESSION['path/to/admin']['var2'] = 'value2';

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

票数 1
EN

Stack Overflow用户

发布于 2012-04-08 20:47:26

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

  • 用户

user(“user”);session_start();

  • Admin

admin(“session_name”);admin

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10062829

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档