重新認識cookie和session

1.Cookie

1.1 Cookie機制

cookie是服務(wù)器生成,客戶端保存的一小段(最大3k)文本文件锹锰。當(dāng)客戶端首次通過HTTP訪問服務(wù)的時候摊阀,服務(wù)端會生成Cookie,然后客戶端(瀏覽器)會保存本Cookie恶座,下次訪問服務(wù)端的時候會在請求頭帶上這個Cookie便脊,從而實現(xiàn)了服務(wù)端和客戶端的數(shù)據(jù)交換和數(shù)據(jù)校驗蚂四。Cookie彌補了HTTP是無狀態(tài)協(xié)議特性的天然缺陷,一個Cookie從生成到發(fā)送的過程如圖:

生成cookie過程

但是哪痰,由于HTTP協(xié)議不僅是無狀態(tài)的遂赠,且是不安全的,因此可以把Cookie的secure設(shè)置為yes晌杰,但是secure屬性并不能對Cookie內(nèi)容加密跷睦,因而不能保證絕對的安全性。如果需要高安全性肋演,需要在程序中對Cookie內(nèi)容加密送讲、解密,以防泄密惋啃。

1.2Cookie特性

  1. Cookie是不可以跨域名訪問的,有了這個特性保證了用戶信息的基本安全监右。每個Cookie可以理解成是每個域名(當(dāng)然域名也分為一級边灭、二級等)訪問的通行證,為了保證數(shù)據(jù)不錯亂和數(shù)據(jù)信息安全健盒,每個域名都會相應(yīng)的由服務(wù)器生成獨立的Cookie绒瘦,每個域名只可以操作對應(yīng)域名的Cookie,這里可以在下面理解Cookie的屬性扣癣。
  2. Cookie中使用中文的話惰帽,需要編碼保存。Cookie中保存中文只能編碼父虑。一般使用UTF-8編碼即可该酗。不推薦使用GBK等中文編碼,因為瀏覽器不一定支持,而且JavaScript也不支持GBK編碼呜魄。
  3. Cookie可以保存二進制文件悔叽,這一點可操作性比較豐富,比如使用數(shù)字證書爵嗅,或者保存圖片娇澎。但是一般不推薦使用,由于Cookie本身特點睹晒,適合存儲少量信息趟庄。

1.3 Cookie屬性

Cookie的操作在OC中也做了一個OO封裝——NSHTTPCookie,基本滿足日常cookie操作伪很,其常用屬性有以下:

  • NSHTTPCookieName戚啥,同name,是該Cookie的名稱是掰,Cookie一旦創(chuàng)建變不可修改虑鼎。
  • NSHTTPCookieValue,同value键痛,該Cookie的值炫彩,如果值為Unicode字符,需要為字符編碼絮短,如果值為二進制數(shù)據(jù)江兢,則需要使用BASE64編碼。
  • NSHTTPCookieOriginURL丁频,該Cookie的原始URL杉允,通過 Cookie可以追蹤用戶的訪問路徑。
  • NSHTTPCookieVersion席里,同versiob叔磷,Cookie的版本,0表示遵循Netscape的Cookie規(guī)范奖磁,1表示遵循W3C的RFC 2109規(guī)范改基。
  • NSHTTPCookieDomain,同domain咖为,Cookie的課訪問的域名秕狰,注意第一個字符必須為‘.’。
  • NSHTTPCookiePath躁染,同path鸣哀,該Cookie的使用路徑。如果設(shè)置為“/A/”吞彤,則只有contextPath為“/A”的程序可以訪問該Cookie我衬。如果設(shè)置為“/”,則本域名下contextPath都可以訪問該Cookie。注意最后一個字符必須為“/”低飒。
  • NSHTTPCookieSecure许昨,該Cookie是否僅被使用安全協(xié)議傳輸。安全協(xié)議褥赊。安全協(xié)議有HTTPS糕档,SSL等,在網(wǎng)絡(luò)>上傳輸數(shù)據(jù)之前先將數(shù)據(jù)加密拌喉。默認為false速那。
  • NSHTTPCookieComment,該Cookie的用處說明尿背。瀏覽器顯示Cookie信息的時候顯示該說明端仰。
  • NSHTTPCookieMaximumAge,該Cookie失效的時間田藐,單位秒荔烧。如果為正數(shù),則該Cookie在>maxAge秒之后失效汽久。如果為負數(shù)鹤竭,該Cookie為臨時Cookie,關(guān)閉瀏覽器即失效景醇,瀏覽器也不會以任何形式保存該Cookie臀稚。如果為0,表示刪除該Cookie三痰。默認為–1吧寺。

2.Session

2.1 Session機制

Session是另一種記錄客戶狀態(tài)的機制,不同的是Cookie保存在客戶端瀏覽器中散劫,而Session保存在服務(wù)器上稚机。客戶端瀏覽器訪問服務(wù)器的時候获搏,服務(wù)器把客戶端信息以某種形式記錄在服務(wù)器上抒钱。這就是Session⊙湛客戶端瀏覽器再次訪問時只需要從該Session中查找該客戶的狀態(tài)就可以了。
如果說Cookie機制是通過檢查客戶身上的“通行證”來確定客戶身份的話仗扬,那么Session機制就是通過檢查服務(wù)器上的“客戶明細表”來確認客戶身份症概。Session相當(dāng)于程序在服務(wù)器上建立的一份客戶檔案,客戶來訪的時候只需要查詢客戶檔案表就可以了早芭。
Session由于保存在服務(wù)器彼城,為了快速的操作數(shù)據(jù),一般會把Session放到內(nèi)存中。Session在用戶第一次訪問由服務(wù)器創(chuàng)建募壕,Session生成后调炬,只要用戶繼續(xù)訪問,服務(wù)器就會更新Session舱馅。用戶沒訪問一次服務(wù)器缰泡,服務(wù)器都會對Session進行一次更新。這里可以理解成Session也是有生命周期的代嗤。

2.2 Session特點

Session雖然保存在服務(wù)端棘钞,但是他的正常運行也是許亞哦客戶端支持的,這是因為一般Session的使用需要Cookie作為識別標(biāo)識(當(dāng)然干毅,這種做法很古老宜猜,一般不采用了,因為不知道客戶端是否支持Cookie)硝逢。同一機器的兩個瀏覽器窗口訪問服務(wù)器時姨拥,會生成兩個不同的Session。但是由瀏覽器窗口內(nèi)的鏈接渠鸽、腳本等打開的新窗口(也就是說不是雙擊桌面瀏覽器圖標(biāo)等打開的窗口)除外叫乌。這類子窗口會共享父窗口的Cookie,因此會共享一個Session拱绑。
為了解決客戶端不支持Cookie的問題综芥,一般采用URL地址重寫的方法。具體的就是把Sessionid放到URL的后面或者拼接到URL上面猎拨。

3.Cookie和Session的區(qū)別和聯(lián)系

  • cookie數(shù)據(jù)存放在客戶的瀏覽器上膀藐,session數(shù)據(jù)放在服務(wù)器上;
    (2)cookie不是很安全红省,別人可以分析存放在本地的COOKIE并進行COOKIE欺騙额各,考慮到安全應(yīng)當(dāng)使用session;
    (3)session會在一定時間內(nèi)保存在服務(wù)器上吧恃。當(dāng)訪問增多虾啦,會比較占用你服務(wù)器的性能『墼ⅲ考慮到減輕服務(wù)器性能方面傲醉,應(yīng)當(dāng)使用COOKIE;
    (4)單個cookie在客戶端的限制是3K呻率,就是說一個站點在客戶端存放的COOKIE不能超過3K硬毕;
    Cookie和Session的方案雖然分別屬于客戶端和服務(wù)端,但是服務(wù)端的session的實現(xiàn)對客戶端的cookie有依賴關(guān)系的礼仗,上面我講到服務(wù)端執(zhí)行session機制時候會生成session的id值吐咳,這個id值會發(fā)送給客戶端逻悠,客戶端每次請求都會把這個id值放到http請求的頭部發(fā)送給服務(wù)端,而這個id值在客戶端會保存下來韭脊,保存的容器就是cookie童谒,因此當(dāng)我們完全禁掉瀏覽器的cookie的時候,服務(wù)端的session也會不能正常使用沪羔。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末饥伊,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子任内,更是在濱河造成了極大的恐慌撵渡,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件死嗦,死亡現(xiàn)場離奇詭異趋距,居然都是意外死亡,警方通過查閱死者的電腦和手機越除,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進店門节腐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人摘盆,你說我怎么就攤上這事翼雀。” “怎么了孩擂?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵狼渊,是天一觀的道長。 經(jīng)常有香客問我类垦,道長狈邑,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任蚤认,我火速辦了婚禮米苹,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘砰琢。我一直安慰自己蘸嘶,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布陪汽。 她就那樣靜靜地躺著训唱,像睡著了一般。 火紅的嫁衣襯著肌膚如雪挚冤。 梳的紋絲不亂的頭發(fā)上况增,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天,我揣著相機與錄音你辣,去河邊找鬼巡通。 笑死,一個胖子當(dāng)著我的面吹牛舍哄,可吹牛的內(nèi)容都是我干的宴凉。 我是一名探鬼主播,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼表悬,長吁一口氣:“原來是場噩夢啊……” “哼弥锄!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起蟆沫,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤籽暇,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后饭庞,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體戒悠,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年舟山,在試婚紗的時候發(fā)現(xiàn)自己被綠了绸狐。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡累盗,死狀恐怖寒矿,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情若债,我是刑警寧澤符相,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站蠢琳,受9級特大地震影響啊终,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜挪凑,卻給世界環(huán)境...
    茶點故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一孕索、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧躏碳,春花似錦搞旭、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至咬最,卻和暖如春翎嫡,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背永乌。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工惑申, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留具伍,地道東北人。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓圈驼,卻偏偏與公主長得像人芽,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子绩脆,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,037評論 2 355