歡迎關注公眾號 學習資料不會少
01
「HTTP 協議是無狀態的」
對于瀏覽器的每一次請求,服務器都會獨立處理,不與之前或之后的請求發生關聯。
這個過程如圖 11-1 所示,3次“請求/響應”之間沒有任何關系。
即使是同一個瀏覽器發送了3個請求,服務器也會獨立處理這3個請求,服務器并不知道這3個請求是來自同一個瀏覽器。
?服務器需要識別瀏覽器請求,就必須弄清楚瀏覽器的請求狀態。既然HTTP 協議是無狀態的,那就讓服務器和瀏覽器共同維護一個狀態,這就是會話機制。
02
「會話機制」
會話機制的過程如圖11-2所示,過程如下:

▲圖 11-1 HTTP協議是無狀態的

▲圖 11-2 繪畫機制
(1) 瀏覽器第一次請求服務器時,服務器創建一個會話,并將會話的id作為響應的一部分發送給瀏覽器。
(2) 瀏覽器存儲會話id,并在后續第二次和第三次請求中帶上會話id。服務器取得請求中的會話id就知道是不是同一個用戶中。
這樣一來,后續請求與第一次請求就產生了關聯。
03
「Cookie機制」
服務器在內存中保存會話對象。瀏覽器可以使用Cookie機制保存會話id,如圖 11-3所示。

▲圖 11-3? Cookie 機制
Cookie 機制是一種會話機制。Cookie 是瀏覽器用來存儲少量數據的一種機制,數據以"key=value"形式存儲,瀏覽器發送HTTP 請求時,自動附帶 cookie信息。
04
「Cookie是什么」
Cookie 是一小段文本信息,伴隨著用戶請求和頁面在瀏覽器和Web 服務器之間傳遞。
Cookie 是一種 HTTP Header, 以"key=value”的形式組成,比如ip_country=CN。
兩個Cookie之間用分號隔開,比如 ip country=CN;mbox=check#true#1499311989。
瀏覽器把 Cookie 通過HTTP請求中的 Header, 比如"Cookie:ip_country=CN”發送給Web服務器。Web服務器通過HTTP響應中的 Header, 比如"Set-Cookie:ip_country=CN”,把Cookie 發送給瀏覽器。
使用 Fiddler 可以清楚地看到Cookie在瀏覽器和服務器之間傳遞的過程。Fiddler工具中可以清晰地看到HTTP 請求中的 Cookie和HTTP 響應中的 Cookie。
實例:啟動 Fiddler, 打開瀏覽器訪問一些購物網站,就可以看到如圖 11-4 所示的情況。

▲圖 11-4? Cookie在瀏覽器和Web服務器中的傳輸
05
「Cookie 的作用」
Cookie 最主要的作用是用來做用戶認證,還可以用于保存用戶的一些其他信息。
Cookie 也可以用于互聯網精準廣告定向技術,比如用戶瀏覽了某些商品,就可以用Cookie 將其記錄下來,對網民所有的上網行為進行個性化的深度分析;按廣告主需求鎖定目標受眾,進行一對一傳播,提供多通道投放,按照效果付費。
06
「抓包觀察上海科技館網站的登錄」
我們通過 Fiddler 來抓包觀察上海科技館網站的登錄,才理解立求的過程和。
第一步;啟動 Fiddler, 啟動瀏覽器,打開http: //piaoweb.sstm.org.cn/: 輸入用戶名和密碼,單擊登錄(請讀者自己注冊賬號),
抓包后可以看到瀏覽器把用戶名和密碼發送給了Wcb服務器,如圖11-5 所示

▲圖11-5 網站登錄抓包
Web 服務器會驗證用戶名和密碼的正確性,然后通過“Set-Cookie”給瀏覽器發送3 個Cookie, 其中一個是用來保存登錄信息的。
第二步:在瀏覽器中打開“用戶中心":http: //piaoweb.sstm.org.cn/user/center/orderlist。
抓包后可以看到,HTTP 請求中會帶上 Cookie (即在上一步中Web服務器返回的Cookie) , 這樣Web 服務器就認為瀏覽器是登錄狀態,如圖11-6所示。

▲圖11-6 自動帶上Cookie
07
「Cookie的屬性」
從Fiddler的抓包中,我們可以看到Web服務器返回了下面這一段數據給瀏覽器。
Set-Cookie: cookie _user _token=C5CBD6FBDODAOEE
4B5DC36E7075D8CDA; Expires=Thu, 06-Jul-2017 09: 17: 46 GMT; Path=/; HttpOnly
(1) Expires 屬性:Expires的值是一個時間,代表過期時間。過了這個時間,該Cookie就失效了。
如果不指定 Expire time, 表示關閉瀏覽器/頁面的時候,此Cookie 就應該被瀏覽器刪除了。
(2) Path 屬性:表示Cookie 所屬的路徑,asp.net 默認為“/”, 就是根目錄。在同一個服務器上的目錄如下:/test/、/test/cd/、/test/dd/.現假設一個Cookiel的path為/test/, Cookie2的path為/test/cd/, 那么test 下的所有頁面都可以訪問到Cookiel, 而/test/dd/的子頁面不能訪問cookie2.這是因為Cookie 只能讓其path 路徑下的頁面訪問。
(3) HttpOnly 屬性:這是個關于安全方面的屬性,將一個Cookie 設置為HttpOnly后,通過 Javascript 腳本將無法讀取到Cookie信息,這能有效地防止黑客用XSS 發起攻擊。
一般來說,跟登錄相關的Cookie 必須設置為HttpOnly。
08
「11. 8 Cookie的分類」
我們可以大致把Cookie分為2類:會話 Cookie 和持久Cookie。
會話Cookie是一種臨時的 cookie, 它記錄了用戶訪問站點時的設置和偏好;關閉瀏覽器,會話Cookie 就被刪除了。
持久 Cookie 存儲在硬盤上,不管瀏覽器退出或者計算機重啟,持久 cookie 都繼續存在。持久Cookie 有過期時間。
09
「Cookie 保存在哪里」
Cookie 是存在硬盤上的,IE 存Cookie 的地方和 Firefox 存 Cookie 的地方不一樣。不同的操作系統存Cookie的地方也可能不一樣。
不同的瀏覽器會在各自的獨立空間存放 Cookie, 互不干涉。
以Windows7、IE8為例,Cookie的存放路徑為 C: \Users\xiaoj\AppData\Local\Microsoft\Windows\Temporary Internet Files。
注意:緩存文件和 cookie 文件是存在一起的,都在這個目錄下。
你也可以這樣查找,打開IE, 單擊Tools-> Internet Options-> General Tab 下的->Browsing history 下的“Setting”按鈕,在彈出的對話框中單擊“View files”, 如圖11-7所示。

▲圖 11-7 查看Cookie 存儲的目錄
不同的網站有不同的Cookie 文件,如圖 11-8 所示。

▲圖 11-8? 查看Cookie
10
「使用和禁用Cookie」
?可以在IE瀏覽器中設置禁用Cookie。打開控制面板中的Internet選項,選擇隱私選項卡。可以設置禁用Cookie,如圖11-9所示。

▲圖 11-9 使用和禁用Cookie
11
「網站自動登錄的原理」
很多網站都有自動登錄的功能,我們以“論壇自動登錄”為例來說明 Cookic是如何傳遞的
在登錄頁面輸入用戶名、密碼,選擇保存密碼單擊登錄(這時候,其實在你的機器上已保存好了登錄的 Cookie, 可以按照上節介紹的方法去你的計算機上找一下博客園的Cookie) 。
我們下次訪問博客園的流程如下。
(1) 用戶打開IE瀏覽器,在地址欄輸入http://49.233.108.117:3000/
(2) IE首先會在硬盤中查找關于cnblogs.com的Cookie, 然后把Cookie 放到HTTP Request 中,再把Request 發給Wcb服務器。
(3) Web服務器返回博客園首頁,這時你會看到自己已經登錄了。
12
「Cookie 和文件緩存的區別」
很多人會把Cookie 和文件緩存弄混淆,這是兩個完全不一樣的東西。唯一的相同之處可能是它們倆都存在硬盤上,而且存在同一個文件夾下。
我們可以在IE中分別選擇刪除Cookie 和緩存文件,如圖11-11所示。
圖 11-11 Cookie和文件緩存
13
「Cookie 泄露隱私」
某年中央電視臺“3·15”晚會上曝光了一個現象,很多不法公司利用Cookie 跟蹤并采集用戶的個人信息,并轉賣給網絡廣告商,形成了一條竊取用戶信息的灰色產業鏈。通過這種方法可以實現廣告準確投放,但卻嚴重干擾了用戶的正常網絡應用,侵害了用戶的隱私和利益。
目前歐洲一些國家已經對Cookie 立法,并規定:如果網站需要保存用戶的 Cookie, 就必須彈出一個對話框,經用戶確認后才能保存Cookie。
往期精彩文章
喜報來了!凡貓學員薪資最高16K!
金融行業軟件測試介紹
2020年為什么大家都開始學習自動化測試?
學習測試開發前 你需要掌握的python 代碼水平
1萬+軟件測試人員都在學的精品課程免費送,大家別錯過
