2011-12-28 92 views
3

我正在開發PHP + MySQL中的知識管理系統,我將工作人員和學生放在不同的表中。現在我面對會話管理中的一些問題。會話管理:PHP + MySQL

如果以學生身份登錄,我可以訪問student_profile.php?id=1,但如果我將URL更改爲staff_profile.php?id=1,我將以員工身份登錄!

我該如何解決這個問題?

另外,我可以把學生和工作人員放在同一張桌子上嗎?有什麼問題嗎?

+0

這是沒有幫助。你會不介意從文件中顯示一些代碼? –

+1

很難告訴你,如果不知道你的會話代碼,請在這裏粘貼你的php代碼。 –

回答

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

將學生和工作人員放在同一張桌子上完全可以。如果它們具有相似的屬性。這些將被認爲是一個「用戶」的子類。但是你所說的更多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表以及這些表的特定屬性。然後,您會在需要時查詢附加信息。

0

沒問題。無需進行小的/重大的重寫,無論您的代碼是做什麼的,只需將「角色」放入會話中,並在每次查詢之前檢查角色。角色=員工或角色=學生。並且不要使用cookie來保存它們,因爲它們可以被更改。檢查每個訪問的角色。