[英]Session management: 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来保存它,因为它们可以被更改。 每次访问都检查角色。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.