cookie和session有什么區(qū)別虐块?
cookie:存儲(chǔ)于客戶端 安全級(jí)別低 存儲(chǔ)量有限 一般不超過(guò)4k
session:存在服務(wù)器端 安全性較高 存儲(chǔ)空間大 但是內(nèi)存占用量也大丢间,而且session不能獨(dú)立存在,必須依賴cookie
flask中cookie和session介紹
一、cookie:
在網(wǎng)站中,http請(qǐng)求是無(wú)狀態(tài)的。也就是說(shuō)即使第一次和服務(wù)器連接后并且登錄成功后,第二次請(qǐng)求服務(wù)器依然不能知道當(dāng)前請(qǐng)求是哪個(gè)用戶问顷。cookie的出現(xiàn)就是為了解決這個(gè)問(wèn)題,第一次登錄后服務(wù)器返回一些數(shù)據(jù)(cookie)給瀏覽器禀梳,然后瀏覽器保存在本地杜窄,當(dāng)該用戶發(fā)送第二次請(qǐng)求的時(shí)候,就會(huì)自動(dòng)的把上次請(qǐng)求存儲(chǔ)的cookie數(shù)據(jù)自動(dòng)的攜帶給服務(wù)器算途,服務(wù)器通過(guò)瀏覽器攜帶的數(shù)據(jù)就能判斷當(dāng)前用戶是哪個(gè)了塞耕。cookie存儲(chǔ)的數(shù)據(jù)量有限,不同的瀏覽器有不同的存儲(chǔ)大小嘴瓤,但一般不超過(guò)4KB扫外。因此使用cookie只能存儲(chǔ)一些小量的數(shù)據(jù)。
二廓脆、session:
session和cookie的作用有點(diǎn)類似筛谚,都是為了存儲(chǔ)用戶相關(guān)的信息。不同的是停忿,cookie是存儲(chǔ)在本地瀏覽器驾讲,而session存儲(chǔ)在服務(wù)器。存儲(chǔ)在服務(wù)器的數(shù)據(jù)會(huì)更加的安全席赂,不容易被竊取吮铭。但存儲(chǔ)在服務(wù)器也有一定的弊端,就是會(huì)占用服務(wù)器的資源颅停,但現(xiàn)在服務(wù)器已經(jīng)發(fā)展至今沐兵,一些session信息還是綽綽有余的。
三便监、cookie和session結(jié)合使用:
web開(kāi)發(fā)發(fā)展至今,cookie和session的使用已經(jīng)出現(xiàn)了一些非常成熟的方案。在如今的市場(chǎng)或者企業(yè)里烧董,一般有兩種存儲(chǔ)方式:
1毁靶、存儲(chǔ)在服務(wù)端:通過(guò)cookie存儲(chǔ)一個(gè)session_id,然后具體的數(shù)據(jù)則是保存在session中逊移。如果用戶已經(jīng)登錄预吆,則服務(wù)器會(huì)在cookie中保存一個(gè)session_id,下次再次請(qǐng)求的時(shí)候胳泉,會(huì)把該session_id攜帶上來(lái)拐叉,服務(wù)器根據(jù)session_id在session庫(kù)中獲取用戶的session數(shù)據(jù)。就能知道該用戶到底是誰(shuí)扇商,以及之前保存的一些狀態(tài)信息凤瘦。這種專業(yè)術(shù)語(yǔ)叫做server side session。
2案铺、將session數(shù)據(jù)加密蔬芥,然后存儲(chǔ)在cookie中。這種專業(yè)術(shù)語(yǔ)叫做client side session控汉。flask采用的就是這種方式笔诵,但是也可以替換成其他形式。
localStorage和sessionStorage區(qū)別
localStorage和sessionStorage一樣都是用來(lái)存儲(chǔ)客戶端臨時(shí)信息的對(duì)象姑子。
他們均只能存儲(chǔ)字符串類型的對(duì)象(雖然規(guī)范中可以存儲(chǔ)其他原生類型的對(duì)象乎婿,但是目前為止沒(méi)有瀏覽器對(duì)其進(jìn)行實(shí)現(xiàn))。
localStorage生命周期是永久街佑,這意味著除非用戶顯示在瀏覽器提供的UI上清除localStorage信息谢翎,否則這些信息將永遠(yuǎn)存在。
sessionStorage生命周期為當(dāng)前窗口或標(biāo)簽頁(yè)舆乔,一旦窗口或標(biāo)簽頁(yè)被永久關(guān)閉了岳服,那么所有通過(guò)sessionStorage存儲(chǔ)的數(shù)據(jù)也就被清空了。
不同瀏覽器無(wú)法共享localStorage或sessionStorage中的信息希俩。相同瀏覽器的不同頁(yè)面間可以共享相同的 localStorage(頁(yè)面屬于相同域名和端口)吊宋,但是不同頁(yè)面或標(biāo)簽頁(yè)間無(wú)法共享sessionStorage的信息。這里需要注意的是颜武,頁(yè)面及標(biāo) 簽頁(yè)僅指頂級(jí)窗口璃搜,如果一個(gè)標(biāo)簽頁(yè)包含多個(gè)iframe標(biāo)簽且他們屬于同源頁(yè)面,那么他們之間是可以共享sessionStorage的鳞上。
同源的判斷規(guī)則:
http://www.test.com
https://www.test.com (不同源这吻,因?yàn)閰f(xié)議不同)
http://my.test.com(不同源,因?yàn)橹鳈C(jī)名不同)
http://www.test.com:8080(不同源篙议,因?yàn)槎丝诓煌?
localStorage和sessionStorage使用時(shí)使用相同的API:
localStorage.setItem("key","value");//以“key”為名稱存儲(chǔ)一個(gè)值“value”
localStorage.getItem("key");//獲取名稱為“key”的值
枚舉localStorage的方法:
for(var i=0;i<localStorage.length;i++){
var name = localStorage.key(i)?;
var value = localStorage.getItem(name);?
}
刪除localStorage中存儲(chǔ)信息的方法:
localStorage.removeItem("key");//刪除名稱為“key”的信息唾糯。
localStorage.clear();?//清空l(shuí)ocalStorage中所有信息
通過(guò)getItem或直接使用localStorage["key"]獲取到的信息均為實(shí)際存儲(chǔ)的副本怠硼。
例如:
localStorage.key = {value1:"value1"}?;
localStorage.key.value1='a'?;
這里是無(wú)法?對(duì)實(shí)際存儲(chǔ)的值產(chǎn)生作用的,下面的寫法也不可以:
?localStorage.getItem("key").value1="a";ss