維持自己的步調,不要操之過急。
進度
今天一樣看 [MTR01] 複習前幾週的內容,做了一個簡短筆記:資料庫正規化
接著複習完資料庫的部分後,我又回去研究了 session 和 cookie 這小倆口的愛恨情仇。感覺對這兩個概念有在更清楚一些,但還是有些模糊。
像是如果拿 Huli 寫的這篇:白話 Session 與 Cookie:從經營雜貨店開始,我會這樣區分 cookie 和 session:
- session 是一種讓瀏覽器能夠「記住狀態」的機制,實作的方式有很多種,可以是網址,也可以是 cookie。
- cookie 只是一個拿來儲存東西的文字檔,之所以和 session 那麼曖昧是因為大部分會拿它來實作 session 機制。
所以這邊能做個總結:session 是一種讓瀏覽器記住狀態的「機制」,而 cookie 只是實現 session 的一種方式。
但是,如果你到網路上搜尋其他 session 和 cookie 的解釋,例如這篇:Day14-Session與Cookie差別,又會得到不同的觀點,我直接節錄一段:
Session 負責紀錄在 server端上的使用者訊息,會在一個用戶完成身分認證後,存下所需的用戶資料,接著產生一組對應的 ID,存入 cookie 後傳回用戶端。 Session泛指有始有終的系列動作/消息,好比會話一般。
簡單來說,大部分人對 session 的定義是:
- 資料要儲存在 server 端
- client 端只會儲存 session_id
總之,我個人還是傾向 Huli 的觀點。雖然你去外面問別人 session 是什麼?一字排開都會告訴你第二種的觀點,但總覺得還是哪裡怪怪?
哪裡怪?我也不知道,就是怪怪的。
學到的事情
研究 session 其實是想複習 PHP 裡面的 session_start()
背後在做什麼,所以就來複習一下吧:
第一步:打開 session
1 | session_start() |
執行這一行的時候,可以想成是幫你執行:
1 | setcookie('PHPSESSID', 'p0s3rb0qd9ih82tbgv120n882p', 'Session'); |
接著就會幫你到 tmp
裡建立一個檔案,用來儲存資料:
1 | ───tmp |
第二步:設定 session 資料
接下來是儲存資料:
1 | $_SESSION['username'] = 'peanu'; |
這一步會自動幫你幫資料存到 sess_p0s3rb0qd9ih82tbgv120n882p 裡面:
1 | # cat sess_p0s3rb0qd9ih82tbgv120n882p |
第三步:結束 session
最後是清除資料:
1 | session_destroy(); |
這一步可以想成是「這個 session 結束了,幫我清除所有紀錄」,所以 sess_p0s3rb0qd9ih82tbgv120n882p 會被刪除,而 $_SESSION
也會變成一個空陣列。
主要的流程差不多就是這樣吧。
後來我研究很久的地方是「怎麼把 application 裡的 PHPSESSID 給刪除?」。執行 session_destroy()
雖然能清掉 server 端的資料,但是 client 端的 cookie 還是會保留 PHPSESSID。
我爬了很多文章,也試過了很多種方式,像是直接 set-cookie
讓 cookie 過期,還是改寫值之類的我都是過了,但就是沒有作用。
雖然有點沮喪,但沒關係,就之後再慢慢研究吧。
題外話
複習是件需要耐心的事,但還是繼續加油!
許願池
明天繼續複習,希望能把以前不懂的部分給補齊。