我正在开发PHP + MySQL中的知识管理系统,我将工作人员和学生放在不同的表中。现在我面对会话管理中的一些问题。会话管理:PHP + MySQL
如果以学生身份登录,我可以访问student_profile.php?id=1
,但如果我将URL更改为staff_profile.php?id=1
,我将以员工身份登录!
我该如何解决这个问题?
另外,我可以把学生和工作人员放在同一张桌子上吗?有什么问题吗?
我正在开发PHP + MySQL中的知识管理系统,我将工作人员和学生放在不同的表中。现在我面对会话管理中的一些问题。会话管理:PHP + MySQL
如果以学生身份登录,我可以访问student_profile.php?id=1
,但如果我将URL更改为staff_profile.php?id=1
,我将以员工身份登录!
我该如何解决这个问题?
另外,我可以把学生和工作人员放在同一张桌子上吗?有什么问题吗?
当用户登录成功时,您可以为会话密钥设置不同的值(标识)。
在login.php中
<?php
session_start();
if(user_is_student()) {
$_SESSION["usertype"]="student";
...
}
else
if(user_is_staff()) {
$_SESSION["usertype"]="staff";
...
}
?>
在工作人员和学生的个人资料页,验证usertype
键的值。
staff.php
<?php
session_start();
$validUser=false;
if(isset($_SESSION["usertype"]))
{
if($_SESSION["usertype"]=="staff")
{
$validUser=true;
}
}
if(!$validUser) {
header("Location: login.php");
}
?>
将学生和工作人员放在同一张桌子上完全可以。如果它们具有相似的属性。这些将被认为是一个“用户”的子类。但是你所说的更多authorization
。所以你首先需要验证用户是学生还是工作人员。如果您发现用户是学生并转到工作人员网址,那么您需要重定向或简单地拒绝访问。
所以,例如说你有这个数据库设置。
User
/ \
Student Staff
现在你有一张名为User的表。每个人都会在这里。有几种方法可以做到这一点,你可以创建一个新的属性(列),它只是一种布尔类型。
所以你的用户表可能看起来像
Userid | Name | Address | ... | Staff
凡
| Staff | = 1 or 0, depending on if they are a student or just staff.
这使得查询时,可能是最快的方法。现在,如果您需要其中任何一个的附加信息,只需创建一个Student和Staff表以及这些表的特定属性。然后,您会在需要时查询附加信息。
没问题。无需进行小的/重大的重写,无论您的代码是做什么的,只需将“角色”放入会话中,并在每次查询之前检查角色。角色=员工或角色=学生。并且不要使用cookie来保存它们,因为它们可以被更改。检查每个访问的角色。
这是没有帮助。你会不介意从文件中显示一些代码? –
很难告诉你,如果不知道你的会话代码,请在这里粘贴你的php代码。 –