PHP 本身就有內建的 Session Tracking 管理機制,可以處理 cookies 所有操縱,提供不同網頁之間,或是在多個造訪期間中,持續儲存資料的存取,這樣的機制方便我們設計購物車功能,或者網站登入驗證機制。
閱讀本文後,應該就能自行架設本機 PHP 測試網站,簡單編寫 Session Tracking 程式。
建立本機開發環境非常重要,方便隨時寫個小程式測試,先讓小東西跑起來,這些小東西就是慢慢堆積起來的技術能力,就從建立開發環境開始 👍。
PHP 開發環境建立
1. 安裝 PHP
首先準備 MacBook 百寶箱 Homebrew,使用 MacBook 寫程式必要的工具,瞬間提升好幾個效率等級。
安裝 PHP:
brew install php
確定安裝成功.
php -v
2. 安裝程式碼編輯器
程式碼編輯器用得順手最重要,太多花俏的功能會影響開發效率,足夠就好。
推薦兩個還不錯的,sublime text 或是 visual studio code,喜歡簡單的開始,就選擇 sublime,sublime 的速度感覺快一點,也可以自行加上各式輔助外掛功能,但為了簡單的開始,不要弄得太複雜。
sublime text 用了一段時間後,漸漸可以自行安裝功能外掛,變更主題樣式,壞處就是太多主題和外掛可選擇,很容易把編輯器弄雜亂。
這時可以試試看 visual studio code,預設就有幾個還不錯的主題外觀,也內建很多語言的編輯功能,語法高亮顯示等,不需自行擴充,但還是要克制一點 (IDE 也很有趣 🐳),以免太專注在打造編輯器,而不是在開發程式。
選擇一:安裝 sublimte text
brew install --cask sublime-text
選擇二:安裝 visual studio code
brew install --cask visual-studio-code
選擇三:什麼都不裝,任何文字編輯器都可以寫 PHP 程式,例如 macOS 內建文字編輯.app。
3. 開始寫程式
找個目錄,寫個 php 程式,檔名 echo.php
<?php
echo '我成功啦!';
執行看看
php echo.php // 應該會看到 我成功啦!
建立本機測試網站
php -S localhost:8080
使用瀏覽器開啟 http://localhost:8080/echo.php ,我成功啦 😂
PHP Session Tracking 教學
HTTP 是一種無狀態協定,意思是每一次的 Request 都是全新的,SERVER 不會知道連續的幾個 Request 都屬於同一個人,或是由不同人發出。
整個 Web 都是無狀態,所以需要借助一些機制,讓我們可以追蹤使用者,完成購物車或其他類似功能,這樣的機制通常稱為 session tracking。
session tracking 有很多不同方式,例如在網頁放一個隱藏欄位,內容是隨機的亂數值,這個值會在使用者操作頁面中一直傳送,這樣就可以追蹤造訪者的狀態。
另一個方式是直接在網址後面加上參數,例如 http://localhost/?userid=123456 ,利用 userid 參數確認使用者是誰,缺點也很明顯,容易竄改,這樣的方式也稱為 URL rewriting。
第三種最常見的方式是使用 cookie,由 Server 產生一小片資料交給瀏覽器存著,每一次 Request 都會附帶 cookie,這樣也是追蹤的方式,PHP 有內建的 Session Tracking 機制,就是使用 cookie 或 url tracking。
現代瀏覽器為了安全因素,可以讓使用者決定阻擋 cookie,如果瀏覽器設定阻擋 cookie,大多數的網站可能就不能登入了。
開始練習,在同一個目錄,新增 session.php
<?php
session_start(); // 開始或恢復已存在 Session
if(isset($_SESSION['views'])) //判斷是不是來過
{
$_SESSION['views'] = $_SESSION['views'] + 1; //已來過,瀏覽次數 + 1
echo session_id() . ' view ' . "{$_SESSION['views']} times";
}
else
{
echo session_id() . ' first login'; //第一次瀏覽
$_SESSION['views'] = 1; //開始計數瀏覽次數
}
開啟網址 http://localhost:8080/session.php
第一次開啟這個頁面,會顯示自動產生的 session id,和 first login 文字,之後的每一次重新整理,都會自動將瀏覽次數加一。
如何恢復成第一次登入狀態呢,把 cookie PHPSESSID 刪掉,就會失去 session,重新開始。
開啟瀏覽器開發人員工具,進入應用程式,儲存空間下面有 Cookie 項目,檢視 http://localhost:8080 中的 cookie 即可看到 PHPSESSID p9d9psf7u6sj5pl5v9pv7pfnrc。
刪掉它即重新開始 Session。
語言規則參考說明
這裡列出範例中使用的 PHP 語言規則。
PHP 檔案標頭
PHP 程式和 HTML 可以混在一起寫,那麼如何區分檔案中的那個部分是 PHP 程式呢,就要用 <?php 和 ?> 標識出來。
<?php
echo 'this is your php code'
?>
如果這支 PHP 檔案,從頭到尾都是 PHP 程式,沒有包含 HTML 或 Javascript 等等的話,最後的 ?> 可以省略,也建議省略。
sesssion_start()
開始一個新 session,或是恢復已存在的 session。
每個讀者第一次造訪,這個 function 會為造訪者產生一個不重複的唯一 session ID,預設這個 session ID 會儲存在 cookie,名稱為 PHPSESSID,如果使用者的瀏覽器不支援 cookies 或阻擋 cookies,這個 session ID 會附加在 URL 後面。
session_id()
session_id() 回傳 session_start() 產生的 session ID。
$_SESSION
PHP 提供的預設變數,是一個陣列,可用來儲存 Session 相關資料,如上面的範例,我們用關鍵字 views 儲存造訪者的瀏覽次數。
$_SESSION['views'] = 1; // 設定 views 的值為 1,這也稱為 key-value pair。
if else
所有語言都有的條件判斷式。
if (條件) {
// 如果就 ...
} else {
// 不然呢 ...
}
isset
PHP 常用的變數檢查,上面的範例用來判斷是不是第一次瀏覽網頁。
// 判斷是否有 views 這個值,第一次造訪後才會設定,所以只在第一次造訪時回傳 false,之後都回傳 true
isset($_SESSION['views']);
echo
給它什麼就回什麼,需要顯示任何資料、文字、變數等等,echo。
最後
從 Session Tracking 學習,可以延伸很多技術,大多是網站必備的功能。
- 網站登入
- 購物車
- 環境設定
這個範例並沒有登入機制,但 Session Tracking 就是登入機制的基礎,先了解 Session Tracking,之後學習完整登入流程就容易許多。
相關參考: