Cookie與Session詳解

Cookie與Session詳解讀書(shū)筆記爽蝴,從概念迅皇、操作、應(yīng)用酵颁、注意事項(xiàng)以及區(qū)別等幾方面詳細(xì)闡述兩者的基礎(chǔ)知識(shí)嫉你,它們都是針對(duì)HTTP協(xié)議的局限性而提出的一種保持客戶端和服務(wù)器間保持會(huì)話連接狀態(tài)的機(jī)制。躏惋。

<small>來(lái)源 《PHP核心技術(shù)與最佳實(shí)踐》 列旭松 陳文 著

一幽污、Cookie詳解

Cookie在遠(yuǎn)程瀏覽器端存儲(chǔ)數(shù)據(jù)并以此跟蹤和識(shí)別用戶的機(jī)制。從實(shí)現(xiàn)上說(shuō)其掂,Cookie是存儲(chǔ)在客戶端上的一小段數(shù)據(jù)油挥,瀏覽器(即客戶端)通過(guò)HTTP協(xié)議和服務(wù)器端進(jìn)行Cookie交互。

Cooke獨(dú)立于語(yǔ)言存在,嚴(yán)格地說(shuō)深寥,Cookie并不是由PHP攘乒、Java等語(yǔ)言實(shí)現(xiàn)的,而是由這些語(yǔ)言對(duì)Cookie進(jìn)行間接操作惋鹅,即發(fā)送HTTP指令则酝,瀏覽器收到指令便操作Cookie并返回給服務(wù)器。因此闰集,Cookie是由瀏覽器實(shí)現(xiàn)和管理的沽讹。舉例說(shuō),PHP并沒(méi)有真正設(shè)置過(guò)Cookie武鲁,只是發(fā)出指令讓瀏覽器來(lái)做這件事爽雄。PHP中可以使用setcookie() 或 setrawcookie() 函數(shù)設(shè)置Cookie。setcookie()最后一個(gè)參數(shù)HttpOnly設(shè)置了后沐鼠,JavaScript就無(wú)法讀取到這個(gè)Cookie挚瘟。

設(shè)置Cookie時(shí)需注意:①函數(shù)有返回值,false失敗饲梭,true成功乘盖,成功僅供參考,不代表客戶端一定能接收到憔涉;②PHP設(shè)置的Cookie不能立即生效订框,要等下一個(gè)頁(yè)面才能看到(Cookie從服務(wù)器傳給瀏覽器,下個(gè)頁(yè)面瀏覽器才能把設(shè)置的Cookie傳回給服務(wù)器)兜叨;如果是JavaScript設(shè)置的穿扳,是立即生效的;③Cookie沒(méi)有顯示的刪除函數(shù)国旷,可以設(shè)置expire過(guò)期時(shí)間纵揍,自動(dòng)觸發(fā)瀏覽器的刪除機(jī)制。

Cookie是HTTP頭的一部分议街,即現(xiàn)發(fā)送或請(qǐng)求Cookie泽谨,才是data域;setcookie()等函數(shù)必須在數(shù)據(jù)之前調(diào)用特漩,這和header() 函數(shù)是相同的吧雹。不過(guò)也可以使用輸出緩沖函數(shù)延遲腳本的輸出,知道設(shè)置好所有Cookie和其他HTTP標(biāo)頭涂身。

Cookie通常用來(lái)存儲(chǔ)一些不是很敏感的信息雄卷,或者進(jìn)行登錄控制,也可用來(lái)記住用戶名蛤售、記住免密碼登錄丁鹉、防止刷票等妒潭。每個(gè)域名下允許的Cookie是有限制的,根據(jù)瀏覽器這個(gè)限制也不同揣钦。Cookie不是越多越好雳灾,它會(huì)增加寬帶,增加流量消耗冯凹,所以不要濫用Cookie谎亩;不要把Cookie當(dāng)作客戶端的存儲(chǔ)器來(lái)用。一個(gè)域名的每個(gè)Cookie限制以4千字節(jié)(KB)鍵值對(duì)的形式存儲(chǔ)宇姚。

還有一種Cookie是Flash創(chuàng)建的匈庭,成為Flash Shard Object,又稱Flash Cookie浑劳,即使清空瀏覽器所有隱私數(shù)據(jù)阱持,這類頑固的Cookie還會(huì)存在硬盤(pán)上,因?yàn)樗皇蹻lash管理魔熏,很多網(wǎng)站采用這種技術(shù)識(shí)別用戶紊选。

Cookie跨域,主要是為了統(tǒng)一應(yīng)用平臺(tái)道逗,實(shí)現(xiàn)單點(diǎn)登錄;需使用P3P協(xié)議(Platform for Privacy Preferences)献烦,通過(guò)P3P使用戶自己可以指定瀏覽器的隱私策略滓窍,達(dá)到存儲(chǔ)第三方Cookie的目的,只需要在響應(yīng)用戶請(qǐng)求時(shí)巩那,在HTTP的頭信息中增加關(guān)于P3P的配置信息就可以了吏夯。Cookie跨域涉及兩個(gè)不同的應(yīng)用,習(xí)慣上稱為第一方和第三方即横。第三方通常是來(lái)自別人的廣告噪生、或Iframe別的網(wǎng)站的URL,這些第三方網(wǎng)站可能使用的Cookie东囚。

二跺嗽、Session詳解

Session即會(huì)話,指一種持續(xù)性的页藻、雙向的連接桨嫁。Session與Cookie在本質(zhì)上沒(méi)有區(qū)別,都是針對(duì)HTTP協(xié)議的局限性而提出的一種保持客戶端和服務(wù)器間保持會(huì)話連接狀態(tài)的機(jī)制份帐。Session也是一個(gè)通用的標(biāo)準(zhǔn)璃吧,但在不同的語(yǔ)言中實(shí)現(xiàn)有所不同。針對(duì)Web網(wǎng)站來(lái)說(shuō)废境,Session指用戶在瀏覽某個(gè)網(wǎng)站時(shí)畜挨,從進(jìn)入網(wǎng)站到瀏覽器關(guān)閉這段時(shí)間內(nèi)的會(huì)話筒繁。由此可知,Session實(shí)際上是一個(gè)特定的時(shí)間概念巴元。

使用Session可以在網(wǎng)站的上下文不同頁(yè)面間傳遞變量毡咏、用戶身份認(rèn)證、程序狀態(tài)記錄等务冕。常見(jiàn)的形式就是配合Cookie使用血当,實(shí)現(xiàn)保存用戶登錄狀態(tài)功能。和Cookie一樣禀忆,session_start() 必須在程序最開(kāi)始執(zhí)行臊旭,前面不能有任何輸出內(nèi)容,否則會(huì)出現(xiàn)警告箩退。PHP的Session默認(rèn)通過(guò)文件的方式實(shí)現(xiàn)离熏,即存儲(chǔ)在服務(wù)器端的Session文件,每個(gè)Session一個(gè)文件戴涝。

Session通過(guò)一個(gè)稱為PHPSESSID的Cookie和服務(wù)器聯(lián)系滋戳。Session是通過(guò)sessionID判斷客戶端用戶的,即Session文件的文件名啥刻。sessionID實(shí)際上是在客戶端和服務(wù)端之間通過(guò)HTTP Request 和 HTTP Response傳來(lái)傳去奸鸯。sessionID按照一定的算法生成,必須包含在 HTTP Request 里面可帽,保證唯一性和隨機(jī)性娄涩,以確保Session的安全。如果沒(méi)有設(shè)置 Session 的生成周期映跟, sessionID存儲(chǔ)在內(nèi)存中蓄拣,關(guān)閉瀏覽器后該ID自動(dòng)注銷;重新請(qǐng)求該頁(yè)面努隙,會(huì)重新注冊(cè)一個(gè)sessionID球恤。如果客戶端沒(méi)有禁用Cookie,Cookie在啟動(dòng)Session回話的時(shí)候扮演的是存儲(chǔ)sessionID 和 Session 生存期的角色荸镊。Session過(guò)期后咽斧,PHP會(huì)對(duì)其進(jìn)行回收。

假設(shè)客戶端禁用Cookie躬存,可以通過(guò)URL或者隱藏表單傳遞sessionID收厨;php.ini中把session.use_trans_sid 設(shè)成1,那么連接后就會(huì)自己加Session的ID优构。

Session以文件的形式存放在本地硬盤(pán)的一個(gè)目錄中诵叁,當(dāng)比較多時(shí),磁盤(pán)讀取文件就會(huì)比較慢钦椭,因此把Session分目錄存放拧额。

對(duì)于訪問(wèn)量大的站點(diǎn)碑诉,用默認(rèn)的Session存儲(chǔ)方式并不適合,較優(yōu)的方法是用Data Base存取Session侥锦。在大流量的網(wǎng)站中进栽,Session入庫(kù)存在效率不高、占據(jù)數(shù)據(jù)庫(kù)connection資源等問(wèn)題恭垦。針對(duì)這種情況快毛,可以使用Memcached、Redis等Key-Value數(shù)據(jù)存儲(chǔ)方案實(shí)現(xiàn)高并發(fā)番挺、大流量的Session存儲(chǔ)唠帝。

三、Cookie與Session問(wèn)答

  1. Cookie運(yùn)行在客戶端玄柏,Session運(yùn)行在服務(wù)端襟衰,對(duì)嗎?

A:不完全正確粪摘。Cookie是運(yùn)行在客戶端瀑晒,有客戶端進(jìn)行管理;Session雖然是運(yùn)行在服務(wù)器端徘意,但是sessionID作為一個(gè)Cookie是存儲(chǔ)在客戶端的苔悦。

2. 瀏覽器禁止Cookie,Cookie就不能用了椎咧,但Session不會(huì)受瀏覽器影響玖详,對(duì)嗎?

A:錯(cuò)邑退。瀏覽器禁止Cookie,Cookie確實(shí)不能用了劳澄,Session會(huì)受瀏覽器端的影響地技。很簡(jiǎn)單的實(shí)驗(yàn),在登錄一個(gè)網(wǎng)站后秒拔,清空瀏覽器的Cookie和隱私數(shù)據(jù)莫矗,單機(jī)后臺(tái)的連接,就會(huì)因?yàn)閬G失Cookie而退出砂缩。當(dāng)然作谚,有辦法通過(guò)URL傳遞Session。

3. 瀏覽器關(guān)閉后庵芭,Cookie和Session都消失了妹懒,對(duì)嗎?

A:錯(cuò)双吆。存儲(chǔ)在內(nèi)存中額Cookie確實(shí)會(huì)隨著瀏覽器的關(guān)閉而消失眨唬,但存儲(chǔ)在硬盤(pán)上的不會(huì)会前。更頑固的是Flash Cookie,不過(guò)現(xiàn)在很多系統(tǒng)優(yōu)化軟件和新版瀏覽器都已經(jīng)支持刪除Flash Cookie匾竿。百度采用了這樣的技術(shù)記憶用戶:Session在瀏覽器關(guān)閉后也不會(huì)消失瓦宜,除非正常退出,代碼中使用了顯示的unset刪除Session岭妖。否則Session可能被回收临庇,也有可能永遠(yuǎn)殘留在系統(tǒng)中。

4. Session 比 Cookie 更安全嗎昵慌? 不應(yīng)該大量使用Cookie嗎假夺?

A:錯(cuò)誤。Cookie確實(shí)可能存在一些不安全因素废离,但和JavaScript一樣侄泽,即使突破前端驗(yàn)證,還有后端保障安全蜻韭。一切都還要看設(shè)計(jì)悼尾,尤其是涉及提權(quán)的時(shí)候,特別需要注意肖方。通常情況下闺魏,Cookie和Session是綁定的,獲得Cookie就相當(dāng)于獲得了Session俯画,客戶端把劫持的Cookie原封不動(dòng)地傳給服務(wù)器析桥,服務(wù)器收到后,原封不動(dòng)地驗(yàn)證Session艰垂,若Session存在泡仗,就實(shí)現(xiàn)了Cookie和Session的綁定過(guò)程。因此猜憎,不存在Session比Cookie更安全這種說(shuō)法娩怎。如果說(shuō)不安全,也是由于代碼不安全胰柑,錯(cuò)誤地把用作身份驗(yàn)證的Cookie作為權(quán)限驗(yàn)證來(lái)使用截亦。

5. Session是創(chuàng)建在服務(wù)器上的,應(yīng)該少用Session而多用Cookie柬讨,對(duì)嗎崩瓤?

A:錯(cuò)。Cookie可以提高用戶體驗(yàn)踩官,但會(huì)加大網(wǎng)絡(luò)之間的數(shù)據(jù)傳輸量却桶,應(yīng)盡量在Cookie中僅保存必要的數(shù)據(jù)。

6. 如果把別人機(jī)器上的Cookie文件復(fù)制到我的電腦上(假設(shè)使用相同的瀏覽器)蔗牡,是不是能夠登錄別人的帳號(hào)呢肾扰?如何防范畴嘶?

A:是的。這屬于Cookie劫持的一種做法集晚。要避免這種情況窗悯,需要在Cookie中針對(duì)IP、UA等加上特殊的校驗(yàn)信息偷拔,然后和服務(wù)器端進(jìn)行比對(duì)蒋院。

7. 在IE瀏覽器下登錄某網(wǎng)站,換成Firefox瀏覽器是否仍然是未登錄狀態(tài)莲绰?使用IE登錄了騰訊網(wǎng)站后欺旧,為什么使用Firefox能保持登錄狀態(tài)?

A:不同瀏覽器使用不同的Cookie管理機(jī)制蛤签,無(wú)法實(shí)現(xiàn)公用Cookie辞友。如果使用IE登錄騰訊網(wǎng)站,使用Firefox也能登錄震肮,這是由于在安裝騰訊QQ軟件時(shí)称龙,你的電腦上同時(shí)安裝了針對(duì)這兩個(gè)瀏覽器的插件,可以識(shí)別本地已登錄QQ號(hào)碼進(jìn)而自動(dòng)登錄戳晌。本質(zhì)上鲫尊,不屬于共用Cookie的范疇。

<small>原文 : http://www.cnblogs.com/gamir/p/4307849.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末沦偎,一起剝皮案震驚了整個(gè)濱河市疫向,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌豪嚎,老刑警劉巖搔驼,帶你破解...
    沈念sama閱讀 211,042評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異侈询,居然都是意外死亡舌涨,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門妄荔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)泼菌,“玉大人谍肤,你說(shuō)我怎么就攤上這事啦租。” “怎么了荒揣?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,674評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵篷角,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我系任,道長(zhǎng)恳蹲,這世上最難降的妖魔是什么虐块? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,340評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮嘉蕾,結(jié)果婚禮上贺奠,老公的妹妹穿的比我還像新娘。我一直安慰自己错忱,他們只是感情好儡率,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著以清,像睡著了一般儿普。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上掷倔,一...
    開(kāi)封第一講書(shū)人閱讀 49,749評(píng)論 1 289
  • 那天眉孩,我揣著相機(jī)與錄音,去河邊找鬼勒葱。 笑死浪汪,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的错森。 我是一名探鬼主播吟宦,決...
    沈念sama閱讀 38,902評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼涩维!你這毒婦竟也來(lái)了殃姓?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,662評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤瓦阐,失蹤者是張志新(化名)和其女友劉穎蜗侈,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體睡蟋,經(jīng)...
    沈念sama閱讀 44,110評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡踏幻,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了戳杀。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片该面。...
    茶點(diǎn)故事閱讀 38,577評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖信卡,靈堂內(nèi)的尸體忽然破棺而出隔缀,到底是詐尸還是另有隱情,我是刑警寧澤傍菇,帶...
    沈念sama閱讀 34,258評(píng)論 4 328
  • 正文 年R本政府宣布猾瘸,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏牵触。R本人自食惡果不足惜淮悼,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望揽思。 院中可真熱鬧袜腥,春花似錦、人聲如沸钉汗。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,726評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)儡湾。三九已至特恬,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間徐钠,已是汗流浹背癌刽。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,952評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留尝丐,地道東北人显拜。 一個(gè)月前我還...
    沈念sama閱讀 46,271評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像爹袁,于是被迫代替她去往敵國(guó)和親远荠。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • 背景在HTTP協(xié)議的定義中失息,采用了一種機(jī)制來(lái)記錄客戶端和服務(wù)器端交互的信息譬淳,這種機(jī)制被稱為cookie,cooki...
    時(shí)芥藍(lán)閱讀 2,357評(píng)論 1 17
  • 作者:晚晴幽草軒www.jeffjade.com/2016/10/31/115-summary-of-cookie...
    饑人谷_Dylan閱讀 1,224評(píng)論 0 51
  • 注:本文轉(zhuǎn)載自前端大全 背景 在HTTP協(xié)議的定義中盹兢,采用了一種機(jī)制來(lái)記錄客戶端和服務(wù)器端交互的信息邻梆,這種機(jī)制被稱...
    楠小忎閱讀 669評(píng)論 0 0
  • 1. cookie 1.1 什么是cookie cookie 是存儲(chǔ)于訪問(wèn)者的計(jì)算機(jī)中的變量。每當(dāng)同一臺(tái)計(jì)算機(jī)通過(guò)...
    cbw100閱讀 4,057評(píng)論 0 13
  • 8月1日 【練背日】 背闊肌上側(cè)和外側(cè):1、引體向上力竭3組见芹, 2剂娄、坐姿下拉3組,12_15個(gè) 背闊肌下側(cè):3玄呛、站...
    撒歡兒的小白羊閱讀 395評(píng)論 0 0