php - 如何为不同类别的不同用户使用会话?
问题描述
我能够成功创建会话并运行它们,并且它在那些特定用户专有的页面中运行良好。
例如,如果有 8 个 admin 页面,那么这 8 个页面将包含仅检查来自 admin 类的 admin 会话的代码。
但是,如果有一个页面,所有三个都具有用户权限,这将是登录页面,我无法为三个单独的用户一起处理三个会话。当我已经使用任何一个用户登录到系统然后尝试转到登录页面时,它应该会自动将我重定向到该用户的专有主页。但相反,它要求我再次输入登录凭据。
我的PHP代码:
<?php
if(isset($_SESSION['p_login'])){
header("location:login_tests/Patient.php");
}
else if(isset($_SESSION['d_login'])){
header("location:login_tests/Doctor.php");
}
else if(isset($_SESSION['a_login'])){
header("location:admin/Dashboard.php");
}
// Login functionalities
if(isset($_POST['submit1'])){
// Patient login
if($_POST['users']=="patient"){
session_start();
include_once 'classes/patient.php';
$patient = new Patient();
if ($patient->p_session())
{
header("location:login_tests/Patient.php");
}
$patient = new Patient();
if ($_SERVER["REQUEST_METHOD"] == "POST"){
$login = $patient->p_login($_REQUEST['username'],$_REQUEST['password']);
if($login){
header("location:login_tests/Patient.php");
}
else
{
echo "<script>alert('Login Failed!');</script>";
}
}
}
// Doctor login
else if($_POST['users']=="doctor"){
session_start();
include_once 'classes/doctor.php';
$doctor = new Doctor();
if ($doctor->d_session())
{
header("location:login_tests/Doctor.php");
}
$doctor = new Doctor();
if ($_SERVER["REQUEST_METHOD"] == "POST"){
$login = $doctor->d_login($_REQUEST['username'],$_REQUEST['password']);
if($login){
header("location:login_tests/Doctor.php");
}
else
{
echo "<script>alert('Login Failed!');</script>";
}
}
}
// Admin login
else{
session_start();
include_once 'classes/admin.php';
$admin = new Admin();
if ($admin->a_session())
{
header("location:admin/Dashboard.php");
}
$admin = new Admin();
if ($_SERVER["REQUEST_METHOD"] == "POST"){
$login = $admin->a_login($_REQUEST['username'],$_REQUEST['password']);
if($login){
header("location:admin/Dashboard.php");
}
else
{
echo "<script>alert('Login Failed!');</script>";
}
}
}
}
// Registration functionalities
else if(isset($_POST['submit2'])){
include_once 'classes/patient.php';
$patient = new Patient();
if ($_SERVER["REQUEST_METHOD"] == "POST"){
$register = $patient->p_register($_REQUEST['name'],$_REQUEST['gender'], $_REQUEST['dob'], $_REQUEST['nic'], $_REQUEST['address'],$_REQUEST['email'], $_REQUEST['username'], $_REQUEST['password']);
if($register){
echo "<script>alert('Registration Successful!');</script>";
}
else
{
echo "<script>alert('Entered email address or username already exists!');</script>";
}
}
}
?>
解决方案
如果我理解你是正确的,那么你的问题是 3 个会话变量$_SESSION['p_login']
和.$_SESSION['d_login']
$_SESSION['a_login']
不需要使用 3 个单独的变量,使用 1: $_SESSION['user'] = value
。
根据许可给它一个值(例如,患者=1,医生=2,管理员=3)。然后你只需要测试:
if( $_SESSION['user'] < 2 ) only permission for patient pages.
if( $_SESSION['user'] < 3 ) permission for patient pages + docter pages.
if( $_SESSION['user'] < 4 ) permission for all pages.
推荐阅读
- reactjs - 如何将本地数组设置为全局反应?
- javascript - 如何获取 Dynatrace 等 Web 监控的正常运行时间图表?
- java - 二次采样 imageview 设置最小缩放
- azure-ad-b2c - azure-ad-b2c 成功验证 otp 消息
- sequence - 数据阶段中的可重新启动序列作业是否也重新运行不是因为序列失败而中止的作业活动
- python - Jupyter上第三方API的OAuth?
- node.js - 启动应用程序时出现“ReferenceError:未定义描述”错误
- ios - Xcode:如果颜色在框架中,则暗模式不起作用
- python - 在 VS Code 中调试 CKAN 2.9
- web - Azure ApplicationInsights Web 自定义事件