簡單快速。
簡述
在實作登入功能時需要用到 session 機制來處理 HTTP 的無狀態問題。第一種方法是自己開一個資料庫來建立 token 機制,第二種方法是用 PHP 提供的內建方法,後者會更方便一點。
關於手做 token 的方式可以參考這篇:當 Cookie 被竄改會怎麼樣?
使用方式
這裡簡單寫個程式碼,腦袋有個畫面就好。
備註:每次要用 session
的功能都要記得先 session_start()
才不會出錯。
1 | // pageA.php |
接著到頁面 B 就可以取得在 頁面 A 儲存的 session:
1 | // pageB.php |
如果要刪除 session 可以這樣子:
1 | // delete_session.php |
這時候頁面 B 就存不到 $_SESSION['username']
的值了。
原理簡述
其實背後的原理一樣是透過 cookie
,只是內建的方法會在你的電腦裡建立一個 session 檔案,把要儲存的內容寫在裡面。
附註:精確一點來說是存在記憶體,所以電腦關機後就會消失了。
;
在 xampp 底下有個 tmp
的資料夾:可以在裏頭找到對應的 session 檔案:
1 | ───tmp |
把它打開就會看到內容:
1 | username|s:5:"peanu"; |
補一下以前沒有講清楚的地方。
雖然我上面說 session 是在你的電腦裡建立一個檔案來儲存,但要注意這句話是建立在「你的電腦屬於 Server 端」的情況下才成立。
再重申一次:
- Client 端儲存的是 session_id:
924h1hulv8fmfqkao4bj05249u
- Server 端儲存的是 session_id 對應到的值:
username:"peanu"
所以,今天你到一個有 session 機制的網頁,會儲存在你電腦裡的是 session_id(透過 cookie 保存),不是 username:"peanu"
,真正的資料是儲存在 Server 那邊的,不是 client,不要搞錯了。
另外要補充的是,在執行 session_destroy()
時,會把 tmp
儲存的 session 資料給刪除,這時候 $_SESSION
就讀不到任何資料,雖然 application 裡還是會保留 PHPSESSID 這個 cookie。