什么是cookie?
二璇妹妹
三周前登錄了她的新浪微博房轿,輸入用戶名和密碼。兩周前再一次登錄送悔,咦?直接就進去了持际,跳過了用戶名和密碼的環(huán)節(jié)。但是今天早上再登錄時候哗咆,又要重新輸入用戶名密碼了蜘欲。弄懂這是為什么,就不必須說說cookie了晌柬。
這就是我的新浪微博姥份,放在這里,試圖漲粉
cookie是由服務器端生成的年碘,發(fā)送給User-Agent(一般是瀏覽器)澈歉,服務器告訴瀏覽器設(shè)置一下cookie,瀏覽器會將cookie以key/value的形式保存在某個目錄下的文本文件內(nèi)屿衅,下一次請求同一網(wǎng)站時就發(fā)送該cookie給服務器
http是無狀態(tài)的協(xié)議埃难,狀態(tài)都是由cookie來控制的,二璇妹妹
不需要重新登錄傲诵,就是因為登錄狀態(tài)已經(jīng)保存在cookie里了凯砍。
cookie的特點
有生命周期
每一個cookie都有一個生命周期箱硕,我們可以通過設(shè)置cookie的Expires值來設(shè)置這一條cookie信息失效的時間拴竹,默認是當瀏覽器關(guān)閉的時候失效。
我們可以利用new Date()的setTime和getTime來設(shè)置失效時間剧罩。滿足同源策略
不同源的情況下栓拜,cookie一樣是無法傳遞的。
但我們平時登錄百度賬號后,在百度知道幕与,百度貼吧等挑势,都直接顯示了登錄狀態(tài),這就涉及到跨域問題的啦鸣,document.domain了潮饱。
只要把這幾個頁面的document.domain都設(shè)置成這個子域的名字,就可以實現(xiàn)跨域通信了诫给。內(nèi)存大小受到限制
Cookie有個數(shù)和大小的限制香拉,大小一般是4k
我們也常常聽到session
Session與Cookie在本質(zhì)上沒有區(qū)別,都是針對HTTP協(xié)議的局限性而提出的一種保持客戶端和服務器間保持會話連接狀態(tài)的機制中狂。
簡單說一下與cookie的幾點不同
- cookie數(shù)據(jù)存放在客戶端瀏覽器上凫碌,session數(shù)據(jù)放在服務器上。
- cookie不是很安全
- session會在一定時間內(nèi)保存在服務器上胃榕,比較占用服務器的性能
- session 的運行依賴 session id盛险,而session id是存在 cookie 中的,也就是說勋又,如果瀏覽器禁用了 cookie 苦掘,session也會失效
cookie 和 session的幾個問答
Cookie運行在客戶端,Session運行在服務端赐写,對嗎鸟蜡?
不完全正確。
Cookie是運行在客戶端挺邀,有客戶端進行管理揉忘;Session雖然是運行在服務器端,但是sessionID作為一個Cookie是存儲在客戶端的端铛。
瀏覽器禁止Cookie泣矛,Cookie就不能用了,但Session不會受瀏覽器影響禾蚕,對嗎您朽?
錯。
瀏覽器禁止Cookie换淆,Cookie確實不能用了哗总,Session會受瀏覽器端的影響。很簡單的實驗倍试,在登錄一個網(wǎng)站后讯屈,清空瀏覽器的Cookie和隱私數(shù)據(jù),單機后臺的連接县习,就會因為丟失Cookie而退出涮母。當然谆趾,有辦法通過URL傳遞Session。
瀏覽器關(guān)閉后叛本,Cookie和Session都消失了沪蓬,對嗎?
錯来候。
存儲在內(nèi)存中額Cookie確實會隨著瀏覽器的關(guān)閉而消失跷叉,但存儲在硬盤上的不會。更頑固的是Flash Cookie营搅,不過現(xiàn)在很多系統(tǒng)優(yōu)化軟件和新版瀏覽器都已經(jīng)支持刪除Flash Cookie性芬。百度采用了這樣的技術(shù)記憶用戶:Session在瀏覽器關(guān)閉后也不會消失,除非正常退出剧防,代碼中使用了顯示的unset刪除Session植锉。否則Session可能被回收,也有可能永遠殘留在系統(tǒng)中峭拘。
Session 比 Cookie 更安全嗎俊庇? 不應該大量使用Cookie嗎?
錯誤鸡挠。
Cookie確實可能存在一些不安全因素辉饱,但和JavaScript一樣,即使突破前端驗證拣展,還有后端保障安全彭沼。一切都還要看設(shè)計,尤其是涉及提權(quán)的時候备埃,特別需要注意姓惑。通常情況下,Cookie和Session是綁定的按脚,獲得Cookie就相當于獲得了Session于毙,客戶端把劫持的Cookie原封不動地傳給服務器,服務器收到后辅搬,原封不動地驗證Session唯沮,若Session存在,就實現(xiàn)了Cookie和Session的綁定過程堪遂。因此介蛉,不存在Session比Cookie更安全這種說法。如果說不安全溶褪,也是由于代碼不安全币旧,錯誤地把用作身份驗證的Cookie作為權(quán)限驗證來使用。
Session是創(chuàng)建在服務器上的竿滨,應該少用Session而多用Cookie佳恬,對嗎?
錯于游。
Cookie可以提高用戶體驗毁葱,但會加大網(wǎng)絡(luò)之間的數(shù)據(jù)傳輸量,應盡量在Cookie中僅保存必要的數(shù)據(jù)贰剥。
如果把別人機器上的Cookie文件復制到我的電腦上(假設(shè)使用相同的瀏覽器)倾剿,是不是能夠登錄別人的帳號呢?如何防范蚌成?
是的前痘。
這屬于Cookie劫持的一種做法。要避免這種情況担忧,需要在Cookie中針對IP芹缔、UA等加上特殊的校驗信息,然后和服務器端進行比對瓶盛。
在IE瀏覽器下登錄某網(wǎng)站最欠,換成Firefox瀏覽器是否仍然是未登錄狀態(tài)?使用IE登錄了騰訊網(wǎng)站后惩猫,為什么使用Firefox能保持登錄狀態(tài)芝硬?
不同瀏覽器使用不同的Cookie管理機制,無法實現(xiàn)公用Cookie轧房。如果使用IE登錄騰訊網(wǎng)站拌阴,使用Firefox也能登錄,這是由于在安裝騰訊QQ軟件時奶镶,你的電腦上同時安裝了針對這兩個瀏覽器的插件迟赃,可以識別本地已登錄QQ號碼進而自動登錄。本質(zhì)上厂镇,不屬于共用Cookie的范疇捺氢。