如何将会话限制为仅在PHP中使用的目录?

如何将会话限制为仅在PHP中使用的目录?,php,session,login,admin,Php,Session,Login,Admin,我的网站上有一个管理系统和一个用户系统。用户系统上的某些数据不会更改,但管理员数据会更改。所以我想知道是否有一种方法可以将管理员会话(当他们登录时)仅限制在admin目录(/admin),这样它就不会干扰我网站的其余部分 谢谢 Lucas不确定我是否完全理解了这个问题,但是你可以随时检查用户是否是管理员,如果不是,只需将他们从管理员系统重定向到用户系统。不确定我是否完全理解了这个问题,但是你可以随时检查用户是否是管理员,如果不是,只需将它们从管理系统重定向到用户系统。有很多方法可以处理类似的问题

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

谢谢


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

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

有很多方法可以处理类似的问题。可能最简单的方法是检查权限和
$\u服务器['REQUEST\u 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\u match()
。但是如果您有一个MVC模式,其中管理脚本实际上可能不是从管理目录中的文件提供的,请使用正则表达式匹配。

有许多方法可以处理类似的问题。可能最简单的方法是检查权限和
$\u服务器['REQUEST\u 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\u match()
。但是,如果您有一个MVC模式,其中管理脚本实际上可能不是从管理目录中的文件提供的,请使用正则表达式匹配。

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

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

通过这种方式,您可以检索路径无关会话变量的值。

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

$_SESSION['path/to/admin']['var1'] = 'value1';
$_SESSION['path/to/admin']['var2'] = 'value2';
这样,您就可以检索路径无关会话变量的值。

在调用之前使用。在这方面,您可以区分用户和管理区域

  • 使用者

    session_name("user");
    session_start();
    
  • 管理员

    session_name("admin");
    session_start();
    
呼叫前使用。在这方面,您可以区分用户和管理区域

  • 使用者

    session_name("user");
    session_start();
    
  • 管理员

    session_name("admin");
    session_start();
    

问题不清楚enoughnope,它可以表示多个特定问题PS:http中没有“文件夹”-错误的术语是混淆问题的第一件事问题不清楚enoughnope,它可以表示多个特定问题PS:没有“文件夹”在http中,首先会混淆问题的是错误的术语。如果你不理解,你可以在评论中提问。不要盲目回答如果你不明白,你可以在评论中提问。不要盲目回答+1,你也应该反过来回答,就像我的回答一样,这样非管理员就不能访问管理员区域。是的,谢谢!我在session_start()中寻找答案。但无论如何,它仍然有效。谢谢大家!+1你也应该反过来做,就像我的回答一样,这样非管理员就不能访问管理员区域。是的,谢谢!我在session_start()中寻找答案。但无论如何,它仍然有效。非常感谢。那么我该如何检查这个会话的名称呢?那么我该如何检查这个会话的名称呢?