想記下來。
簡述
因為 HTTP 協議本身是「無狀態」的,所以要讓它可以記得「每個 request 之間的關聯性」才能做出登入機制。
登入的流程是這樣子:
- 填好帳密後送出表單 => 第一個 request
- Server 確認帳密無誤,重新導回首頁 => 第二個 request (回到首頁也會發一個 request)
最簡單的方式
Server 可以透過 cookie 來做設定,讓瀏覽器在下一次的 request 自動把 cookie 帶上。
拿留言板的例子來舉例:
1 | /* handle_login.php */ |
當登入成功後,可以打開 devtool 看看這之間發生了什麼。
首先,Server 會回傳 Set-Cookie 這個 header,也就是 PHP 中寫入的值 username=$username:

接著被導回首頁後,會看到 request header 就會自動把剛剛的 cookie 給帶上來:

這時候 index.php 就可以利用 cookie 的值來檢查這個 user 有沒有登入:
1 | /* index.php */ |
最後就完成登入機制了:

這就是最最最基本的登入功能了,只是這個做法有個問題,就是別人可以竄改 cookie 值來假冒別人身分,這邊我另外開一篇文章來解釋,請參考 當 Cookie 被竄改會怎麼樣?