会话管理:PHP + MySQL

时间:2011-12-28 06:31:19

标签: php mysql session

我正在开发PHP + MySQL的知识管理系统,我将员工和学生放在不同的表格中。现在我正面临会话管理中的一些问题。

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

如何解决这个问题?

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

3 个答案:

答案 0 :(得分:3)

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

在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");
 }
?>

答案 1 :(得分:1)

将学生和教职员放在同一张桌子上是完全可以的。如果它们具有相似的属性。这些将被视为表示“用户”的子类。但你所说的更多是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表。然后,您将在需要时查询其他信息。

答案 2 :(得分:0)

没问题。没有次要/重大改写,无论你的代码做了什么,只需将“角色”放入会话并在每次查询之前检查角色。角色=员工或角色=学生。并且不要使用cookie来保存它,因为它们可以被更改。检查每次访问的角色。

相关问题