日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

程序员过关斩将--cookie和session的关系其实很简单

發布時間:2023/12/4 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 程序员过关斩将--cookie和session的关系其实很简单 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

喜歡就點關注吧!

月高風下,下班路上....

菜菜哥,告訴你一個秘密,但是不允許告訴任何人

這么秘密,你有男票了?~

不是,昨天我偷偷去面試了,結果掛了

這不是好事嗎,上天讓公司留住你.....

好吧,不過還是要請教你一個問題,cookie和session有什么相同和不同嗎?

這個可能要講很長時間

定義

Cookie,有時也用其復數形式 Cookies,指某些網站為了辨別用戶身份、進行 session 跟蹤而儲存在用戶本地終端上的數據(通常經過加密)

Session:在計算機中,尤其是在網絡應用中,稱為“會話控制”。Session對象存儲特定用戶會話所需的屬性及配置信息。

很簡短的兩段定義,但是已經道出了cookie和session本質的區別,一個位于客戶端,一個位于服務端。這個特性帶著濃重的色彩,實際中的應用都離不開這個定義。

存儲

這里針對瀏覽器中的cookie來討論,不要做過多遐想

如果拋開其他特性來說,cookie本質上是瀏覽器(http請求)提供的一種客戶端存儲的數據,但是這個存儲數據有自己的一些特性,比如:cookie長度的限制,跨域的限制(當然可以在服務端配合的情況下的突破這種限制)等。就像所有的存儲一樣,cookie也可以保存在內存中,也可以保存在磁盤中,只不過保存在磁盤的時候是在瀏覽器的存儲目錄下,畢竟cookie是基于http的,http請求又基于瀏覽器。

session在很多情況下被稱為會話,本質上是一種服務端的存儲數據。誕生的主要原因是為了解決http無狀態這種特性。既然是數據,其實就可以存儲于任何介質中,像實際應用中,有存儲于內存中的,也有存儲于redis的。所以只要看透了它的本質,存儲在哪里可能就只是一個驅動的問題了。其實完全可以自己寫一個程序把session的數據存儲在txt中,只不過性能上可能需要多加考慮。

有聯系嗎

cookie

當用戶第一次訪問并登陸一個網站的時候,cookie的設置以及發送會經歷以下4個步驟:

1. 客戶端發送一個請求到服務器 --》?

2. 服務器發送一個HttpResponse響應到客戶端,其中包含Set-Cookie的頭部 --》?

3. 客戶端保存cookie,之后向服務器發送請求時,HttpRequest請求中會包含一個Cookie的頭部 --》

4. 服務器返回響應數據

set-cookie:?session=4a0b9b1cce73c469b8a6b6a8aec294d5;?domain=.xx.com;?path=/;?expires=Sun,?25?Aug?2019?08:21:27?-0000;?secure;?HttpOnly

以上過程很明顯是一個最常見的場景,cookie的特性以及值是由服務端來下發,但是不要忘記cookie本質上是一種客戶端技術,所以客戶端其實同樣能操作cookie,比如:登錄的時候服務端的返回結果中可以不包含set-cookie的頭部,而是把值通過正文來返回,客戶端腳本通過讀取返回的正文解析出結果,然后寫入cookie同樣能達到相同的效果。set-cookie只不過是http協議中已經約定好的格式,服務端告訴客戶端需要設置cookie的協議而已。當然cookie還有其他很多特性(可能隨著發展有所增加或者減少):

屬性介紹
namename字段為一個cookie的名稱
valuevalue字段為一個cookie的值
domain可以訪問此cookie的域名
path可以訪問此cookie的頁面路徑
expires/Max-Age此cookie超時時間。
SizeSize字段 此cookie大小
httpcookie的httponly屬性
secure設置是否只能通過https來傳遞此條cookie

由于瀏覽器的安全策略,不同域名(何為不同域名,請百度)的cookie是不允許的,但是可以通過服務端的配置可以解決這個問題。

session

session的創建目的初衷就是為了讓服務端記住會話,簡而言之就是讓服務端能識別出來是哪個客戶端,既然要記住,那服務端必須要存儲每個會話的數據,比如:實際項目中最常用的用戶信息等。服務端存儲這些用戶數據沒問題,最大的一個障礙是怎么樣識別諸多請求中哪些是同一個會話。要解決這個問題,只依靠服務端無法解決,必須需要客戶端來配合:需要上傳會話的標識。

客戶端上傳會話的標識,必須是客戶端和服務端都能支持的協議和數據,其實也可以看做是http請求支持的協議和數據,既然是基于http請求,最方便的就是利用cookie,cookie是一種key-value的數據存儲格式,value的值正適合作為session的標識(session也是一種key-value的存儲),在這種情況下cookie終于和session有了一定的聯系。

session機制利用cookie來作為標識的傳輸機制,并不意味著只能用cookie,只要是服務端和客戶端約定好了位置,session標識我可以放到http請求的任何位置(當然http請求必須得支持傳輸才可以)。你完全可以把session的標識放到http頭Authorization字段,只要服務端能正確的讀到此值并且正確解析即可。

有些面試官喜歡問cookie和session的相同和不同,甚至他們的聯系,這樣的提問在某種程度上是不太好的,容易讓人錯誤的認為cookie和session的聯系很密切,但是其實他們的聯系很單純,純潔的朋友利用關系。

此文篇幅屬于5分鐘系列,更能有效利用碎片化時間,下一篇,我們也許可以討論一下基于cookie和session的認證

●程序員修神之路--用NOSql給高并發系統加速

●程序員修神之路--高并發系統設計負載均衡架構

●程序員修神之路--做好分庫分表其實很難之一(繼續送書)

●程序員修神之路--做好分庫分表其實很難之二(送書繼續)

●程序員過關斬將--你為什么還在用存儲過程?

●程序員過關斬將--小小的分頁引發的加班血案

●程序員修神之路--問世間異步為何物?

●程序員修神之路--提高網站的吞吐量?

●程序員修神之路--?分布式高并發下Actor模型如此優秀?

●程序員過關斬將--你的面向接口編程一定對嗎?

●程序員修神之路--高并發下為什么更喜歡進程內緩存

總結

以上是生活随笔為你收集整理的程序员过关斩将--cookie和session的关系其实很简单的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。