網站規劃與設計上課補充教材

第十二堂課: 簡易 PHP 的應用與 session 簡易認證功能

如果要讓網站承認你曾經登入過了,而且還沒有離線,這時,使用 session 就是個好方法!那如何透過 PHP 來產生 session 的相關變數資料? 如何透過 PHP 來處理不同網頁的資料傳遞?使用 session_start() 就好了!如何使用呢?那就得要稍微了解 PHP 才行啊!上一章的內容要完全了解, 這一章的內容就比較好處理囉!
本章重點目標:
  1. PHP 搭配表單的簡易使用方式!用 if 來判定一些簡單的測試:
    1. PHP 使用條件判斷式的語法:
      簡易的方式為:
      if (條件成功) {
      	條件成功所做的事情 ;
      	....;
      }
      
      複雜一些些的情況:
      if (條件成功) {
      	條件成功所做的事情 ;
      	....;
      } else {
      	條件失敗所做的事情 ;
      	....;
      }
      
      更複雜的情況
      if (條件成功) {
      	條件成功所做的事情 ;
      	....;
      } elseif (條件成功) {
      	條件成功所做的事情 ;
      	....;
      } elseif (條件成功) {
      	條件成功所做的事情 ;
      	....;
      } else {
      	條件失敗所做的事情 ;
      	....;
      }
      
    2. 算命一則 (製作 class_12_1_from.php 及 class_12_1_to.php 來處理底下的動作):
      題目:你的判斷力果決力(個性): 如果你偶然在路邊撿到一千元,你想去買一件很需要的大衣,但是錢不夠; 如果去買一雙不急需要的運動鞋,則又多了數百元,你會怎麼做?選擇項目有底下三個:
      1. 什麼都不買先存起來
      2. 自已添些錢把大衣買回來
      3. 買運動鞋再去買些其他的小東西

      解答的情況為:
      1. 選擇【什麼都不買先存起來】的人
        你是判斷力超級強的人,不客氣的說,你甚至有點莽撞,就是因為你衝重率直的個性, 反而考慮不夠周詳,你常常後悔自已匆匆作決定,忽略了其他事情。
      2. 選擇【自已添些錢把大衣買回來】的人
        你的決斷力還算不錯,雖然有時也會三心二意、猶豫徘徊,可是總是在重要關頭作出決定, 比起普通人來說已經算是傑出的了!你最大的特色是作了決定不再反悔。別太高興, 並不是因為你的決定都是正確的,而是因為你好面子,錯了也不肯承認。
      3. 選擇【買運動鞋再去買些其他的小東西】的人
        你是標準拿不定主意的人,做事沒主見,處處要求別人給你意見,你很少自已做判斷, 因為個性上你有些自卑,不能肯定自已,你這種人一定曾經受過某些心理傷害,或者周遭的人物太優秀了, 因此造成你老是有不如人的感覺。

  2. 嘗試將上頭的資料寫入同一個檔案中,亦即使用 class_12_2.php 將上述的資料完成!

  3. 嘗試寫一個密碼帳號驗證網頁,檔名為 class_12_3.php,裡面讓使用者填寫 1)帳號與 2)密碼。假設你的正確帳密為 mydic 與 123456, 當使用者輸入正確資訊時,顯示正確,當使用者輸入錯誤時,若帳號錯誤,填寫『無此帳號』,若密碼錯誤,填寫『錯誤密碼!』

  4. 由於 header 可以重新導向另一個新檔案,透過 PHP 的 header("Location: $url"); 來處理即可。例如,上述驗證檔中,若成功登入,則導向 class_12_3_right.php 檔案中, 且內容填寫:『對!這就是你要的!』,並且有個連結可以回前一頁。如果驗證錯誤,則導向 class_12_3_error.php 中,同樣顯示錯誤訊息,且有連結回前一頁。

  5. 使用 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'] 來處理各項應該要理解的各項任務。
    更新 class_12_2.php 的檔案,加入一個名為 $_SESSION['count'] 的變數,(1)若此變數從來沒有被這次 session 所使用,那就設定為 1 ,如果這個變數已經存在, 那就設定為 $_SESSION['count']+1 ,然後在登入驗證的畫面中,加入『這是你第 XX 次嘗試登入』的訊息!

  6. 使用 cookie 寫入一些資訊到使用者的電腦中,經常使用來紀錄使用者要登入系統的相關資訊,或者是保留使用者在這個用戶端電腦使用 server 端資源時, 所設定的一些特定項目,如字型、操作行為等等。
    • 通常使用的方式需要在整個網頁的最前面,尚未有任何資訊輸出時。也可以搭配 session 喔!
    • 使用的設定值為 setcookie("變數名","變數值",存在用戶端cookie file的時間),其中時間可以使用『 time()+60*60*24*n 』處理。其中 n 為天數喔!
    • 取用 cookie 的值,透過 $_COOKIE["變數名稱"] 來使用!
    更新 class_12_2.php 的檔案,使用 cookie 達成下列功能:
    • 先試圖取出 $_COOKIE['count4010c???']
    • 如果不存在,則 1)顯示『你是第一次看本頁』,且設定 $_COOKIE['count4010c???'] 為 1 ,此計數器存活時間為 14 天。
    • 如果存在,則 1)設定變數 $count 為 $_COOKIE['count4010c???'] + 1 (請透過 (init)$var 變成整數後相加), 2)網頁顯示『這是你第 $count 次瀏覽本頁』, 3)之後再次寫回 cookie 的數次值 (同樣存活 14 天)。

本章練習與習題:
  1. 修改我們上課的網站資料,將 header.php 內的 <aside> 內,加入一個使用者驗證功能。指定帳號為 username 且密碼為 password 。
    1. 若使用者尚未登入,則使用 <input ...> 的方式加入兩個輸入列。
    2. 如果使用者嘗試送出驗證資料,則驗證的 form 傳送到當前頁面 (可以透過 php 的 $_SERVER['PHP_SELF'] )。
    3. 若使用者認證失敗,回傳一個是帳號錯誤還是密碼錯誤的訊息到 <aside> 欄位中,並回到 a 步驟繼續等待驗證
    4. 若驗證成功,則設定一個名為 username 的 session 變數,此變數為歡迎你自己的姓名。同時給予一個歡迎訊息。
    5. 未來在你關閉 browser 之前,這個訊息都會持續存在網頁中,但最長存在 2 小時。
  2. 分析 class_12_2.php 內的 cookie 用法,請在你的首頁加入一個計數器,且這個計數器也可以使用『 date("Y/m/d H:i", time()) 』函數來顯示刷新網頁的時間, 然後同時載入 cookie,說明此網頁的讀取次數喔!
  3. 將上述資料進行完畢,並於首頁加入正確的連結,將結果上傳後,到上傳網站查閱是否正確處理才可以!