<ul id="qxxfc"><fieldset id="qxxfc"><tr id="qxxfc"></tr></fieldset></ul>


      月高風(fēng)下,下班路上....



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

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

      不是,昨天我偷偷去面試了,結(jié)果掛了

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

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

      這個可能要講很長時(shí)間



      定義



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




      Session:在計(jì)算機(jī)中,尤其是在網(wǎng)絡(luò)應(yīng)用中,稱為“會話控制”。Session對象存儲特定用戶會話所需的屬性及配置信息。




      很簡短的兩段定義,但是已經(jīng)道出了cookie和session本質(zhì)的區(qū)別,一個位于客戶端,一個位于服務(wù)端。這個特性帶著濃重的色彩,實(shí)際中的應(yīng)用都離不開這個定義。
      存儲


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




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


      session在很多情況下被稱為會話,本質(zhì)上是一種服務(wù)端的存儲數(shù)據(jù)。誕生的主要原因是為了解決http無狀態(tài)這種特性。既然是數(shù)據(jù),其實(shí)就可以存儲于任何介質(zhì)中,像實(shí)際應(yīng)用中,有存儲于內(nèi)存中的,也有存儲于redis的。所以只要看透了它的本質(zhì),存儲在哪里可能就只是一個驅(qū)動的問題了。其實(shí)完全可以自己寫一個程序把session的數(shù)據(jù)存儲在txt中,只不過性能上可能需要多加考慮。
      有聯(lián)系嗎
      cookie

      當(dāng)用戶第一次訪問并登陸一個網(wǎng)站的時(shí)候,cookie的設(shè)置以及發(fā)送會經(jīng)歷以下4個步驟:

      1. 客戶端發(fā)送一個請求到服務(wù)器 --》?

      2. 服務(wù)器發(fā)送一個HttpResponse響應(yīng)到客戶端,其中包含Set-Cookie的頭部 --》?

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

      4. 服務(wù)器返回響應(yīng)數(shù)據(jù)
      set-cookie:?session=4
      a0b9b1cce73c469b8a6b6a8aec294d5;?domain=.xx.com;?path=/;?expires=Sun,?25?Aug?2019?08:21:27?-0000;?secure;?HttpOnly


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

      屬性介紹
      namename字段為一個cookie的名稱
      valuevalue字段為一個cookie的值
      domain可以訪問此cookie的域名
      path可以訪問此cookie的頁面路徑
      expires/Max-Age此cookie超時(shí)時(shí)間。
      SizeSize字段 此cookie大小
      httpcookie的httponly屬性
      secure設(shè)置是否只能通過https來傳遞此條cookie
      由于瀏覽器的安全策略,不同域名(何為不同域名,請百度)的cookie是不允許的,但是可以通過服務(wù)端的配置可以解決這個問題。

      session


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


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


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


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

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






      友情鏈接
      ioDraw流程圖
      API參考文檔
      OK工具箱
      云服務(wù)器優(yōu)惠
      阿里云優(yōu)惠券
      騰訊云優(yōu)惠券
      京東云優(yōu)惠券
      站點(diǎn)信息
      問題反饋
      郵箱:[email protected]
      QQ群:637538335
      關(guān)注微信

        <ul id="qxxfc"><fieldset id="qxxfc"><tr id="qxxfc"></tr></fieldset></ul>
          校花双乳高耸呻吟不止视频 | juliaann艳妇吞精 | 午夜精品一区二区三区福利视频 | 老师穿旗袍肉丝好紧好爽视频 | 操老女人视频在线观看 | 美女撒尿不遮挡免费 | 免费视频成人片在线观看 | 日本XXXX毛少妇高清HD | 青春草免费视频在线 | 国产熟女AAAAA片 |