【发布时间】:2017-03-16 01:14:09
【问题描述】:
我的程序有 3 种用户类型。员工、人力资源和供应商。每当员工登录时,他/她只能访问该员工可用的页面。
if( $usr->userLogin() ) {
echo "Welcome";
if($usr->user_type == "Vendor") {
$_SESSION['vend']='set';
header("Location:Vendor/vendorHome.php");
}
else if($usr->user_type == "HR"){
$_SESSION['hr']='set';
header("Location:HR/hrHome.php");
}
else {
$_SESSION['emp']='set';
header("Location:Employee/home.php");
}
}
else {
echo "Incorrect Username, Password, or User Type. Please Try<a href='index.php'> Again</a>";
在每一页的顶部,我都有这段代码,根据它是否是 3 种类型之一而有所不同。
?php
session_start();
if(!isset($_SESSION['vend'])) #If session is not set, user isn't logged in.
#Redirect to Login Page
{
header("Location:../index.php");
}
?>
在编写此应用程序时,这不是问题,直到我意识到如果我将另一个用户添加到任何类型,第二个用户就可以访问第一个用户的页面、信息和数据库中的所有内容。有没有办法根据用户声明第二个会话 ID?我将如何根据用户类型和个人用户本身限制每个用户可用的信息?这甚至可能吗?我不知道每种类型会有多少用户,但我知道会有超过 5 个用户。
**编辑:**感谢您的建议。我将与他们一起改进我的代码。我认为我没有正确解释我的问题。
假设我有 2 个员工类型为“Jack”和“Jill”的用户。 “Jack”浏览了应用程序并添加了一些只有他才能看到或能够编辑和注销的表单。当“吉尔”登录时,她不应该看到任何东西。事实并非如此。 'Jill' 登录,并且能够查看和编辑'Jack' 所能看到的所有内容。 “Jack”和“Jill”都不能访问任何与 HR 或 Vendor 相关的内容。这部分会话变量有效。
【问题讨论】:
-
您究竟如何存储任何信息?如果您根据会话中的单个值(例如 id)从数据库中提取它,我认为没有问题。而且您的重定向不起作用,因为您在设置标题之前打印了一些东西。
-
您的数据库是否没有将信息与用户 ID 关联起来?您甚至存储用户 ID 吗?这听起来像是您的应用程序中的设计错误。
-
也许你应该重新考虑你的数据库结构,在你的情况下,用户类型可以被认为是一个等级,用户可以有多个等级。您可以在表中引入一个包含位标志值的新列。然后你可以做类似
$usr->rank & RANK_VENDOR等的事情。 -
只是一个观察:永远不要忘记在标头位置之后终止脚本(退出)。
-
感谢 cmets。 DmitryPonkin,重定向工作。 rogeriolino,我不知道我应该这样做。谢谢你让我知道。 Bytewave,User_ID 是一个无符号自增数。 Xorifelse 我不明白你在问什么。
标签: php mysql session pdo session-variables