我正在開發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代碼。 –