15.
認證與session
一、 關於session
- 「session」原意為「期間」,通常翻譯為「會期」。
- 使用者從啟動session開始,至瀏覽器關閉的這段期間,就是一個session。
- session可以讓您用來儲存各種資料,以便讓程式讀取使用。
- session實際上是一個儲存在主機端(通常放在/tmp中)的一個純文字檔。
- 要開始使用session,必須先用session_start()來啟動session功能。
- 要把資料存到session只要用 $_SESSION['名稱']="值"; 即可。
- 要使用之,則直接用 $_SESSION['名稱'] 即可。
二、 讓特定人員可以設定管理班級資料
- 建立config.php檔案,在裡面設定好帳號密碼,並於header.php中引入。
- 帳密可用陣列設定之:$admin['帳號']='密碼';
- 在header.php加入session_start()以啟動session功能。
- 可以在套入樣板前加入:if(!$_SESSION['isAdmin']) $main=login_form();
- $_SESSION['isAdmin']是自訂的session,其值為真,表示管理員有登入了。
- login_form()為自訂函數,當管理員沒登入時,把$main的內容改為登入表單。
- login_form()裡面op為login,並含「帳號」、「密碼」欄位
- class.php的流程控制多一組login,並執行admin_login(),用來判斷帳號密碼是否和設定相符。
- header.php工具列多一組<li><a href='class.php?op=logout'>管理員登出</a></li>
- class.php的流程控制多一組logout,並執行$_SESSION['isAdmin']=null;然後轉向回本頁。
三、 讓副班長可以設定管理該班文章資料
- header.php的工具列多一組<li><a href="index.php?op=admin">文章管理</a></li>
- index.php流程多一組admin,並判斷$_SESSION['isLeader']有無值,有值則用list_article()列出該班所有文章,無值則執行leader_login_form()秀出登入表單。
- $_SESSION['isLeader']是自訂的session,其值可存班級編號class_sn,以辨識目前登入者是那一班的管理者,若無值則表示未登入了。
if($_POST['pass']==$class['passwd']) $_SESSION['isLeader']=$class_sn;
- leader_login_form()為自訂函數,op為login,內含班級選單、「密碼」欄位。
- index.php的流程控制多一組login,並執行leader_login($class_sn),用來判斷輸入密碼是否和班級密碼相符。若符合,將班級編號$class_sn存入$_SESSION['isLeader']中。
- header.php工具列多一組<li><a href='index.php?op=logout'>副班長登出</a></li>
- index.php的流程控制多一組logout,並執行$_SESSION['isLeader']=null;然後轉向回本頁。
- 修改list_article($class_sn)函數,加入$class_sn作為參數。若$class_sn有值,則秀出該班文章,若空值秀出全部文章。
$and_class_sn=empty($class_sn)?"":"and a.class_sn='{$class_sn}'";
- 將原刪除、編輯的連結用$tool取代之,若$_SESSION['isLeader']的值和目前顯示的文章其班級相符,就秀出$tool,否則$tool為空值。
$tool=($_SESSION['isLeader']==$data['class_sn'])?"原編修工具連結":"";