9.
身份認證機制
一、 請先建立資料表
- 請建立一個eznews_users的資料表後,直接新增幾筆帳號密碼資料,其中passwd請用md5()加密
二、 建立登入機制
- 在樣板中建立 [var.login]
- 在config.php中建立$login變數,其內容為登入表單。表單以post送至index.php
<div class='row' style='margin:10px;'>
<form action='index.php' method='post' class='form-horizontal' role='form'>
<div class='form-group'>
<label class='col-md-4 control-label'>帳號</label>
<div class='col-md-8'><input type='text' name='uname' class='form-control'></div>
</div>
<div class='form-group'>
<label class='col-md-4 control-label'>密碼</label>
<div class='col-md-8'><input type='password' name='passwd' class='form-control'></div>
</div>
<input type='hidden' name='op' value='login'>
<button type='submit' class='btn btn-success pull-right'>登入</button>
</form>
</div>
- index.php加入一組login流程,並建立對應login的函數。
- login的函數利用uname和passwd去eznews_users撈取uid資料
- 若有uid資料,就將uname及uid紀錄到session中,如:$_SESSION['uid'],並視為已登入。
- 修改config.php中的$login變數,判斷若有$_SESSION['uid']存在,則秀出登入者姓名,反之,才嗅出登入表單。
三、 建立登出機制
- 登出只要將uname及uid的session紀錄清除即可
- 修改config.php中的$login變數,在登入者姓名後加入登出按鈕,利用get方式傳遞op=logout至index.php即可。
- index.php加入一組logout流程,並建立對應logout的函數。
- logout的函數利用unset()清除uname和passwd的session即為登出
四、 檢視所有需要有權限才能執行的功能
- 先處裡刪除、修改、新增等幾個函數,沒有登入即跳出不執行。編輯表單則是傳回「請先登入」之類的字樣。
if(!isset($_SESSION['uid']) or empty($_SESSION['uid'])){
return;
}
- 接著處理未登入就不該看見的按鈕,例如:編輯、修改或發布新聞
- 最後拿掉當初發布新聞時,表單中的密碼輸入欄位,因為已經沒有必要。相關的判斷或session也應該要拿掉。此外表單也可以重新排列一下,使相關欄位能盡量大一點。
五、 如果希望新聞只有發布者能修改或刪除
- 必須要新聞的表加一個uid欄位,並且先把空的uid都適當的uid編號(例如1)
update eznews set uid=1
- 表單的姓名欄位也可以拿掉(或自動產生姓名預設值),改為隱藏的uid及uname欄位(對應author)即可。對應的儲存動作也要修改,以便把uid存進去。
- 調整刪除及儲存的函數,條件加入uid='{$uid}' 以便確定只有本人才能改
- 相關編輯或刪除按鈕加上判斷條件,當登入者uid和該文的uid一致時才出現。
- 最後去新增幾個帳號測試看看是否和想像的一致即可。
六、 完整程式範例
www.zip