第十二堂課: 簡易 PHP 的應用與 session 簡易認證功能
如果要讓網站承認你曾經登入過了,而且還沒有離線,這時,使用 session 就是個好方法!那如何透過 PHP 來產生 session 的相關變數資料?
如何透過 PHP 來處理不同網頁的資料傳遞?使用 session_start() 就好了!如何使用呢?那就得要稍微了解 PHP 才行啊!上一章的內容要完全了解,
這一章的內容就比較好處理囉!
本章重點目標:
- PHP 搭配表單的簡易使用方式!用 if 來判定一些簡單的測試:
- PHP 使用條件判斷式的語法:
簡易的方式為: if (條件成功) { 條件成功所做的事情 ; ....; } 複雜一些些的情況: if (條件成功) { 條件成功所做的事情 ; ....; } else { 條件失敗所做的事情 ; ....; } 更複雜的情況 if (條件成功) { 條件成功所做的事情 ; ....; } elseif (條件成功) { 條件成功所做的事情 ; ....; } elseif (條件成功) { 條件成功所做的事情 ; ....; } else { 條件失敗所做的事情 ; ....; }
- 算命一則 (製作 class_12_1_from.php 及 class_12_1_to.php 來處理底下的動作):
題目:你的判斷力果決力(個性): 如果你偶然在路邊撿到一千元,你想去買一件很需要的大衣,但是錢不夠; 如果去買一雙不急需要的運動鞋,則又多了數百元,你會怎麼做?選擇項目有底下三個:- 什麼都不買先存起來
- 自已添些錢把大衣買回來
- 買運動鞋再去買些其他的小東西
解答的情況為:- 選擇【什麼都不買先存起來】的人
你是判斷力超級強的人,不客氣的說,你甚至有點莽撞,就是因為你衝重率直的個性, 反而考慮不夠周詳,你常常後悔自已匆匆作決定,忽略了其他事情。 - 選擇【自已添些錢把大衣買回來】的人
你的決斷力還算不錯,雖然有時也會三心二意、猶豫徘徊,可是總是在重要關頭作出決定, 比起普通人來說已經算是傑出的了!你最大的特色是作了決定不再反悔。別太高興, 並不是因為你的決定都是正確的,而是因為你好面子,錯了也不肯承認。 - 選擇【買運動鞋再去買些其他的小東西】的人
你是標準拿不定主意的人,做事沒主見,處處要求別人給你意見,你很少自已做判斷, 因為個性上你有些自卑,不能肯定自已,你這種人一定曾經受過某些心理傷害,或者周遭的人物太優秀了, 因此造成你老是有不如人的感覺。
- PHP 使用條件判斷式的語法:
- 嘗試將上頭的資料寫入同一個檔案中,亦即使用 class_12_2.php 將上述的資料完成!
- 嘗試寫一個密碼帳號驗證網頁,檔名為 class_12_3.php,裡面讓使用者填寫 1)帳號與 2)密碼。假設你的正確帳密為 mydic 與 123456,
當使用者輸入正確資訊時,顯示正確,當使用者輸入錯誤時,若帳號錯誤,填寫『無此帳號』,若密碼錯誤,填寫『錯誤密碼!』
- 由於 header 可以重新導向另一個新檔案,透過 PHP 的 header("Location: $url"); 來處理即可。例如,上述驗證檔中,若成功登入,則導向 class_12_3_right.php 檔案中,
且內容填寫:『對!這就是你要的!』,並且有個連結可以回前一頁。如果驗證錯誤,則導向 class_12_3_error.php 中,同樣顯示錯誤訊息,且有連結回前一頁。
- 使用 session 處理與判斷使用者登入後的身份,在各個網頁間迭代。session 為 server 與 browser 之間的溝通,由於是 Server 與 browser
間的溝通,因此這個溝通的訊息只有在 1) browser 關閉或 2) 超過 server 指定的 session 連線時間後,才會關閉這個 session 。
- 如果想要設定 session lifetime 的話,可以在 session_start() 前面加上 session_set_cookie_params(秒數); 來處理
- 一定要從 session_start() 函數後開始,且所有加入此 session 的網頁通通要啟用此函數;
- 使用 $_SESSION['var'] 來處理各項應該要理解的各項任務。
- 使用 cookie 寫入一些資訊到使用者的電腦中,經常使用來紀錄使用者要登入系統的相關資訊,或者是保留使用者在這個用戶端電腦使用 server 端資源時,
所設定的一些特定項目,如字型、操作行為等等。
- 通常使用的方式需要在整個網頁的最前面,尚未有任何資訊輸出時。也可以搭配 session 喔!
- 使用的設定值為 setcookie("變數名","變數值",存在用戶端cookie file的時間),其中時間可以使用『 time()+60*60*24*n 』處理。其中 n 為天數喔!
- 取用 cookie 的值,透過 $_COOKIE["變數名稱"] 來使用!
- 先試圖取出 $_COOKIE['count4010c???']
- 如果不存在,則 1)顯示『你是第一次看本頁』,且設定 $_COOKIE['count4010c???'] 為 1 ,此計數器存活時間為 14 天。
- 如果存在,則 1)設定變數 $count 為 $_COOKIE['count4010c???'] + 1 (請透過 (init)$var 變成整數後相加), 2)網頁顯示『這是你第 $count 次瀏覽本頁』, 3)之後再次寫回 cookie 的數次值 (同樣存活 14 天)。
本章練習與習題:
- 修改我們上課的網站資料,將 header.php 內的 <aside> 內,加入一個使用者驗證功能。指定帳號為 username 且密碼為 password 。
- 若使用者尚未登入,則使用 <input ...> 的方式加入兩個輸入列。
- 如果使用者嘗試送出驗證資料,則驗證的 form 傳送到當前頁面 (可以透過 php 的 $_SERVER['PHP_SELF'] )。
- 若使用者認證失敗,回傳一個是帳號錯誤還是密碼錯誤的訊息到 <aside> 欄位中,並回到 a 步驟繼續等待驗證
- 若驗證成功,則設定一個名為 username 的 session 變數,此變數為歡迎你自己的姓名。同時給予一個歡迎訊息。
- 未來在你關閉 browser 之前,這個訊息都會持續存在網頁中,但最長存在 2 小時。
- 分析 class_12_2.php 內的 cookie 用法,請在你的首頁加入一個計數器,且這個計數器也可以使用『 date("Y/m/d H:i", time()) 』函數來顯示刷新網頁的時間, 然後同時載入 cookie,說明此網頁的讀取次數喔!
- 將上述資料進行完畢,並於首頁加入正確的連結,將結果上傳後,到上傳網站查閱是否正確處理才可以!