首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >会话管理: PHP+MySQL

会话管理: PHP+MySQL
EN

Stack Overflow用户
提问于 2011-12-28 14:31:19
回答 3查看 639关注 0票数 3

我正在用PHP + MySQL开发一个知识管理系统,我将教职员工和学生放在不同的表中。现在我在会话管理中遇到了一些问题。

如果我以学生身份登录,我可以访问student_profile.php?id=1,但如果我将url更改为staff_profile.php?id=1,我将以工作人员身份登录!

我该如何解决这个问题?

另外,我可以把学生和教职员工放在同一张桌子上吗?有什么问题吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-12-28 14:45:29

当用户登录成功时,您可以为会话密钥设置不同的值(标识)。

在login.php中

代码语言:javascript
复制
<?php
 session_start();

 if(user_is_student()) {
      $_SESSION["usertype"]="student";
      ...
 }
 else 
 if(user_is_staff()) {
      $_SESSION["usertype"]="staff";
      ...
 }
?>

在教职员工和学生档案页面中,验证usertype密钥的值。

staff.php

代码语言:javascript
复制
<?php
  session_start();
  $validUser=false;
  if(isset($_SESSION["usertype"]))
   {
     if($_SESSION["usertype"]=="staff")
       {
          $validUser=true;
        }
   }
 if(!$validUser) {
     header("Location: login.php");
 }
?>
票数 3
EN

Stack Overflow用户

发布于 2011-12-28 14:38:05

把学生和教职员工放在同一张桌子上是完全可以的。如果它们有相似的属性,那就是。这些将被认为是“用户”的子类。但你所说的是更多的authorization。因此,您首先需要验证用户是学生还是教职员工。如果您发现该用户是一名学生,并且转到了教师url,那么您需要重定向或简单地拒绝访问。

例如,假设您设置了以下数据库。

代码语言:javascript
复制
                    User
                  /      \
              Student   Staff

现在您有一个名为User的表。所有人都会在这里。有几种方法可以做到这一点,你可以创建一个新的属性(列),它可能只是某种类型的布尔值。

因此,您的用户表可能如下所示

代码语言:javascript
复制
Userid | Name | Address | ... | Staff

哪里

代码语言:javascript
复制
| Staff | = 1 or 0, depending on if they are a student or just staff.

这可能是进行查询时最快的方法。现在,如果您需要其中任何一个的其他信息,只需创建一个Student和Staff表,其中包含这些表的特定属性。然后,您将在需要时查询附加信息。

票数 1
EN

Stack Overflow用户

发布于 2011-12-28 14:38:09

没问题。无论你的代码在做什么,只要将“角色”放入会话中,并在每次查询之前检查角色,就不需要进行小/大的重写。role=staff或role=student。不要使用cookie来保存它们,因为它们可以更改。每次访问时检查角色。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8652669

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档