大家都知道cookie是存在客戶端,session存在伺服器端。那麼客戶端具體是怎樣獲取cookie信息的呢? 原文: http://www.hellomao.top/2019/06/22/two_web_cookie/ 作者: 小friend 實驗環境 實驗環境:xampp ...
大家都知道cookie是存在客戶端,session存在伺服器端。那麼客戶端具體是怎樣獲取cookie信息的呢?
更好的閱讀體驗可訪問 這裡。
實驗環境
實驗環境:xampp + Thinkphp5 + Firefox
首先清除瀏覽器的cookie緩存和伺服器端的session文件。
- Firefox快捷鍵:Ctrl + Shift + Delete 清除瀏覽器cookie緩存信息。
- 查看伺服器端的session文件基本也為空。(why.tmp是xampp原本自帶的文件)
註:查看session存放位置的php代碼為:
<?php
//~ 當前session存放位置
$sessionpath = session_save_path();
echo $sessionpath;
現在,瀏覽器既沒有cookie信息,伺服器端也不存在session文件。
獲取過程
在瀏覽器右鍵查看元素,開始訪問搭建的網站。
點擊網路=》點擊要查看的包=》可在響應頭部發現Set-Cookie
欄位,也就是這時,伺服器端返回了我們cookie。我們的瀏覽器也就存儲了該cookie信息。以後我們再次訪問該網站時,都會帶著這個cookie信息。
那麼現在伺服器端的session信息是怎麼個情況呢?
可以發現,此時已經生成了很多文件。其中最重要的文件也就是標記的那個,是伺服器為我們生成的session文件(sess_後的內容與伺服器端返回給我們的cookie一致)。但是因為我們還沒有登陸,所以此時文件內容為空,大小為0KB。
然後我們登陸。再次去查看session文件。
發現文件大小已經變為了1KB。其中存儲著我們的登陸信息。(文件的內容與我們具體代碼的實現相關)
以後當我們訪問該網站時,就會在請求頭部帶上cookie信息。像這樣:
然後伺服器端接收到cookie信息,就會去查找session文件的內容,如果發現文件記錄了你已經登陸過,那麼就不用再次登陸。
至此,session的作用也就體現了出來。
總結
可以發現session與cookie是密不可分的,任一方出了問題,都不能發揮出它的作用。例如:如果瀏覽器端清除了cookie信息,或者伺服器端的session文件被刪除,那麼就需要重新登陸,重新生成互相匹配的cookie和session才可達到用戶免登陸的效果。同樣,如果瀏覽器端禁用了cookie,該目的也不能達到。