目錄
1、Cookie介紹
- HTTP協議是無狀態的協議。一旦資料交換完畢,客戶端與伺服器端的連線就會關閉,再次交換資料需要建立新的連線,這就意味著伺服器無法從連線上跟蹤會話。也就是說即使第一次和伺服器連線後並且登入成功後,第二次請求伺服器依然不能知道當前請求是哪個使用者。舉個例子:使用者A購買了一件商品放入購物車內,當再次購買商品時,伺服器已經無法判斷該購買行為是屬於使用者A的會話,還是使用者B的會話了。要跟蹤該會話,必須引入一種機制。
什麼是一次會話:
使用者開啟瀏覽器訪問某個網站, 在這個網站上瀏覽任意頁面, 訪問完成後將瀏覽器關閉的過程稱為是一次會話。
Cookie
的出現就是為了解決這個問題,第一次登入後伺服器後,如果伺服器需要記錄該使用者狀態,就使用Response
向客戶端瀏覽器頒發一個Cookie
,瀏覽器會把Cookie
資料儲存在本地。該使用者傳送第二次請求的時候,就會自動的把上次請求儲存的Cookie
資料自動的攜帶給伺服器,伺服器檢查該Cookie
儲存name
、value
等資訊,以此來辨認使用者狀態,伺服器還可以根據需要修改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的作用:
- 使用者第一次登陸時,勾選下次直接登陸或者記住密碼,就是採用記錄
Cookie
實現的。 Cookie
內記錄使用者名稱和密碼(加密)資訊,只要請求時伺服器收到Cookie
,識別成功,預設為已登陸。
4、Cookie內容引數說明
引數 | 描述 |
---|---|
name |
必需。規定 Cookie的名稱。 |
value |
必需。規定 Cookie的值。 |
expire |
可選。規定 Cookie的有效期。 |
domain |
可選。規定 Cookie的域名。 |
path |
可選。規定 Cookie的伺服器路徑。 |
secure |
可選。規定是否通過安全的 HTTPS 連線來傳輸 Cookie。 |
httpOnly |
可選。防止XSS攻擊(跨站指令碼攻擊) |
說明:
path
:Cookie
的有效範圍,這個引數是在domain
引數基礎上的有效範圍,如果path
設定為”/”
,那就是在整個domain
都有效。secure
:Cookie
是否僅通過安全的https,值為0或1。如果值為1,則Cookie
只能在https
連線上有效,預設值為0,表示Cookie
在http
和https
連線上都有效。(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()