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