1、Cookie介紹

  • HTTP協議是無狀態的協議。一旦資料交換完畢,客戶端與伺服器端的連線就會關閉,再次交換資料需要建立新的連線,這就意味著伺服器無法從連線上跟蹤會話。也就是說即使第一次和伺服器連線後並且登入成功後,第二次請求伺服器依然不能知道當前請求是哪個使用者。舉個例子:使用者A購買了一件商品放入購物車內,當再次購買商品時,伺服器已經無法判斷該購買行為是屬於使用者A的會話,還是使用者B的會話了。要跟蹤該會話,必須引入一種機制。

    什麼是一次會話:

    使用者開啟瀏覽器訪問某個網站, 在這個網站上瀏覽任意頁面, 訪問完成後將瀏覽器關閉的過程稱為是一次會話。

  • Cookie的出現就是為了解決這個問題,第一次登入後伺服器後,如果伺服器需要記錄該使用者狀態,就使用Response向客戶端瀏覽器頒發一個Cookie,瀏覽器會把Cookie資料儲存在本地。該使用者傳送第二次請求的時候,就會自動的把上次請求儲存的Cookie資料自動的攜帶給伺服器,伺服器檢查該Cookie儲存namevalue等資訊,以此來辨認使用者狀態,伺服器還可以根據需要修改Cookie的內容。
  • Cookie就相當於是伺服器給客戶端們頒發一個通行證,每人一個,無論誰訪問都必須攜帶自己通行證。這樣伺服器就能從通行證上確認客戶身份,這就是Cookie的工作原理。
  • Cookie儲存的資料量有限,不同的瀏覽器有不同的儲存大小,但一般不超過4KB,因此使用Cookie只能儲存一些小量的資料。
  • Cookie的出現彌補HTTP協議無狀態的不足。但是Cookie是儲存在客戶端的,通過瀏覽器或者抓包工具很容易就能獲取到,所以非常不安全。

2、Session介紹

  • Session是另一種記錄客戶狀態的機制,不同的是Cookie儲存在客戶端瀏覽器中,而Session儲存在伺服器上。客戶端瀏覽器訪問伺服器的時候,伺服器把客戶端資訊以某種形式記錄在伺服器上。儲存在伺服器的資料會更加的安全,不容易被竊取。客戶端瀏覽器再次訪問時,只需要從該Session中查詢該客戶的狀態就可以了。
  • 如果說Cookie機制是通過檢查客戶身上的“通行證”來確定客戶身份的話,那麼Session機制就是通過檢查伺服器上的“客戶明細表”來確認客戶身份。Session相當於程式在伺服器上建立的一份客戶檔案,客戶來訪的時候只需要查詢客戶檔案表就可以了。
  • Session儲存在伺服器也有一定的弊端,就是會佔用伺服器的資源,但現在伺服器已經發展至今,儲存一些Session資訊還是綽綽有餘的。

3、Cookie工作原理圖解

如下圖所示:

提示:如果步驟5攜帶的是過期的cookie或者是錯誤的cookie,那麼將認證失敗,返回至要求身份認證頁面。

記錄Cookie的作用

  1. 使用者第一次登陸時,勾選下次直接登陸或者記住密碼,就是採用記錄Cookie實現的。
  2. Cookie內記錄使用者名稱和密碼(加密)資訊,只要請求時伺服器收到Cookie,識別成功,預設為已登陸。

4、Cookie內容引數說明

引數 描述
name 必需。規定 Cookie的名稱。
value 必需。規定 Cookie的值。
expire 可選。規定 Cookie的有效期。
domain 可選。規定 Cookie的域名。
path 可選。規定 Cookie的伺服器路徑。
secure 可選。規定是否通過安全的 HTTPS 連線來傳輸 Cookie。
httpOnly 可選。防止XSS攻擊(跨站指令碼攻擊)

說明

  • pathCookie的有效範圍,這個引數是在domain引數基礎上的有效範圍,如果path設定為”/”,那就是在整個domain都有效。
  • secureCookie是否僅通過安全的https,值為0或1。如果值為1,則Cookie只能在https連線上有效,預設值為0,表示Cookiehttphttps連線上都有效。(0或1,也可表示Flase或True)
  • httpOnly:通過js指令碼將無法讀取到Cookie資訊,這樣能有效的防止XSS攻擊(跨站指令碼攻擊),這樣就增加了Cookie的安全性,即便是這樣,也不要將重要資訊存入Cookie

5、Selenium操作Cookie的API

webdriver可以讀取、新增和刪除Cookie資訊。

webdriver操作Cookie的方法有:

操作 說明
get_cookies() 獲得所有Cookie資訊(重點)
add_cookie(cookie_dict) 新增Cookie,必須有name 和value 值(重點)
get_cookie(name值) 返回指定name名稱的Cookie資訊
delete_cookie(name) 刪除特定(部分)的Cookie資訊
delete_all_cookies() 刪除所有Cookie資訊

6、Selenium操作Cookie的示例

"""
1.學習目標:
掌握selenium對cookie操作
2.語法
2.1獲取所有cookie
driver.get.cookies()
返同列表格式字典型別 [{},{},{}]
2.2新增cookie
driver.add_cookie(引數)
引數:字典格式{"name":"name值","value":"value值"}
3.需求
實現selenium對cookie操作
"""
# 1.匯入selenium
from selenium import webdriver
from time import sleep # 2.開啟瀏覽器
driver = webdriver.Chrome() # 3.開啟註冊A頁面
# 不開啟一個頁面,cookie為[]。
url = "http://www.baidu.com/"
driver.get(url) # 4.操作cookie
# 4.1 獲取cookie
cookies = driver.get_cookies()
for cookie in cookies:
# 值列印cookie中的name和value
print("%s -> %s" % (cookie['name'], cookie['value'])) print("=======================")
# 4.2 獲取一個cookie的指定屬性值
# 引數是一個cookie中name的屬性值
# 沒有找到返回None
print(driver.get_cookie("BAIDUID")) print("=======================")
# 4.3 新增cookie
cookie = {"name": "key-aaaaaaa", "value": "value-aaaaaaa"}
driver.add_cookie(cookie) # 新增後再次獲取
cookies = driver.get_cookies()
for cookie in cookies:
print("%s -> %s" % (cookie['name'], cookie['value'])) print("=======================")
# 4.4 刪除指定cookie
# 根據name刪除
driver.delete_cookie("key-aaaaaaa")
# 刪除後再次獲取
cookies = driver.get_cookies()
for cookie in cookies:
print("%s -> %s" % (cookie['name'], cookie['value'])) print("=======================")
# 4.5 刪除全部cookie
driver.delete_all_cookies()
print(driver.get_cookies()) # 5.關閉瀏覽器
sleep(2)
driver.quit()

參考:https://www.cnblogs.com/linguoguo/p/5106618.html