【Python】Cookie 和 Session
前言
最近在學習 Python 網絡編程,已經實現了簡單的服務器和瀏覽器的信息交互。正在進一步學習 Cookie 和 Session(可能還有 Token),所以寫一篇隨筆來加深自己的理解。
?
一、Cookie 是什么
Cookie,有時也用其復數形式?Cookies,指某些網站為了辨別用戶身份、進行 Session 跟蹤而儲存在用戶本地終端上的數據(通常經過加密)。【來源:百度百科】
簡言之,Cookie 是服務器和瀏覽器通信的一項內容。用于實現本地的持久化。服務器可以在返回給瀏覽器的數據中加入 Set-Cookie 字段。瀏覽器會把這個字段的內容保存下來,然后再以后的每次請求中自動加入 Cookie。這樣,服務器在收到請求的時候,就可以識別請求發送方的身份,從而給出一些個性化的響應。
所以 Cookie 就是服務器給客戶端加的一個識別標簽,這個標簽保存在客戶端,每次請求數據時會通過瀏覽器發送給服務器。同時,服務器上會保存與這個標簽相關聯的其他用戶數據,比如用戶名。Cookie 有如下屬性:
| 屬性 | 介紹 |
| name | cookie的名字 |
| value | cookie的取值 |
| expires | 過期時間,如果這個屬性不指定的話,就是“session cookie”,也就是這個session在關閉瀏覽器后會被刪除 |
| path | cookie的作用域,子文件夾下的網頁可以訪問父文件夾下的網頁生成的cookie,但是反過來卻不能。例如在/路徑下生成了cookie_a,在/sub路徑下生成了cookie_b,則/路徑下只能讀取cookie_a,而/sub路徑下可以讀取cookie_a和cookie_b。注意,如果不設置這個屬性的話,默認使用的是當前的url的相對路徑,例如在url http://www.a.com/some/page.php中設置cookie時沒有指定path路徑,則它的path屬性為/some。一般我們設置cookie,就是讓網站中所有其他的網頁都能讀取到的,所以應該將其設置為'/'。 |
| domain | cookie的所屬域名,默認是全域名,例如www.somesite.com。當然也可以自己指定根域名,即somesite.com,這樣的話如果當前網站旗下有子域名網站的話,例如a.somesite.com b.somesite.com之類的子域名,那么在子域名所在網站中也能讀取這個cookie。 |
| secure | 這個屬性是針對https來說的,如果設定其為true的話,那么只有在請求當前網站的https的地址的時候,才能讀取出來。 |
| httponly | 這個屬性設置js對于當前cookie的讀取權限,如果為true,則js無法讀取修改當前cookie |
?
?
二、Session 是什么
我的理解(待修正)。
Session 從字面解釋,就是“會話”,瀏覽器和服務器建立了一次會話,那么服務器怎么知道會話的對方是誰呢?常見的是通過用戶名和密碼進行驗證。但是如果每次訪問都需要驗證就太麻煩了,所以,在一次驗證之后,服務器在返回的 Cookie 中加入一個字段,Session_id,通常是一個隨機字符串。在服務器中,通過 Session_id 對當前用戶的若干信息進行關聯(比如用戶名、出生年月等),這樣服務器就可以借用 Cookie 中的 Session_id 來識別會話對象。Session 相對于 Cookie 技術的優點在于它是加密的,由于 Session_id 是一個隨機字符串,所以,無法在 Cookie 中直接偽造訪問者的身份信息。當然,如果 Session_id 被截獲,仍然是可以冒充身份進行訪問的。
?
三、如何實現 Cookie
簡單的方法就是在請求和響應中加入 Cookie 字段。
Cookie 的內容保存在瀏覽器端。
Session 的數據保存在服務器端。
?
四、我理解的Token
我理解?Token 的機制和 Session 一樣,也是服務器和瀏覽器對暗號。
不同的是,Session_id 本身是無意義字符串,完全依靠保存在服務器的映射表來指向用戶的有意義信息;而 Token 本身則攜帶信息(加密的),它可能是已存在服務器的一類有意義的數據。
服務器拿到 Token,只需要進行解密,就可以得到已經保存在服務器的數據(比如用戶名),從而驗證客戶的身份。在這種情況下,就節約了服務器用來存儲 Session_id 的空間。
所以,Cookie 是明文的有意義字符串,很容易被偽造;Session 是一串無意義的字符串,幾乎不可能被偽造,但是攻擊者也可以通過截獲 Session_id 來冒充特定用戶;Token 是加了密的 Cookie,它的安全性取決于加密算法。(它們之間可能存在很多細節差異,但是從初學者的角度,我想先做一些粗淺的分類)
五、待解決的問題
Session 是否是永久的??
?
?
參考文獻:
https://github.com/alsotang/node-lessons/tree/master/lesson16
https://www.zhihu.com/question/19786827/answer/28752144
https://www.cnblogs.com/moyand/p/9047978.html
轉載于:https://www.cnblogs.com/bladeofstalin/p/11222429.html
總結
以上是生活随笔為你收集整理的【Python】Cookie 和 Session的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python与Golang协程异同
- 下一篇: python网络爬虫(14)使用Scra