JavaScript cookie原理及使用實(shí)例
什么是cookie?
cookie 是本地計(jì)算機(jī)的臨時(shí)存儲(chǔ)。
作用:在瀏覽器中進(jìn)行數(shù)據(jù)的存儲(chǔ),用戶名、密碼(比如:保存頁(yè)面信息,自動(dòng)登錄等)。
特點(diǎn):
cookie需要在服務(wù)器環(huán)境下運(yùn)行; cookie的容量在4kb左右,限制為每個(gè)域名50個(gè)cookie個(gè)數(shù)(IE),不同瀏覽器容量和個(gè)數(shù)不同; cookie以字符串類型存儲(chǔ),不同域名存儲(chǔ)的數(shù)據(jù)是無(wú)法共享; cookie默認(rèn)是臨時(shí)存儲(chǔ)的,當(dāng)瀏覽器關(guān)閉時(shí),自動(dòng)銷毀; cookie可以被禁用也可以刪除,且安全性不高。 可以對(duì)cookie值進(jìn)行加密(MD5);讀取和設(shè)置cookie
document.cookie = 'user=123456';console.log(document.cookie); //user=123456
使用f12查看當(dāng)前頁(yè)面存儲(chǔ)的cookie
注意:
在打開網(wǎng)址時(shí)或者提交表單時(shí)自動(dòng)裹挾著cookie數(shù)據(jù)發(fā)送到服務(wù)器,并且服務(wù)端程序可以 繼續(xù)裹挾著新的cookie內(nèi)容存儲(chǔ)在你的電腦的cookie中。
設(shè)置cookie的生存期
格式:document.cookie = “名稱=值;expires=” + 時(shí)間;(時(shí)間必須是一個(gè)字符串)。
var date=new Date();date.setHours(date.getHours()+1);//設(shè)置1小時(shí)的生存期// document.cookie='a=3'; //先存入a=3,只運(yùn)行第一次console.log(document.cookie);var a=Number(document.cookie.split('=')[1]);a++;document.cookie='a='+a+';expires='+date.toUTCString();
上面代碼表示:設(shè)置cookie在當(dāng)前時(shí)間的一個(gè)小時(shí)后過(guò)期,第一次運(yùn)行先存入a為3的值,然后把cookie的值從字符串轉(zhuǎn)為數(shù)值型,再進(jìn)行累加,每次設(shè)置生存期都要把data對(duì)象轉(zhuǎn)為字符串類型(toUTCString)。
在生存期內(nèi)的cookie,關(guān)閉頁(yè)面不會(huì)銷毀,生存期結(jié)束,關(guān)閉頁(yè)面銷毀cookie;
cookie存儲(chǔ)多個(gè)數(shù)據(jù)
var obj={ user:'xietian', age:30, sex:'男' } function setCookie(obj,date){ for(var prop in obj){document.cookie=prop+'='+obj[prop]+(date ? ';expires='+date.toUTCString() : ''); } } var date=new Date(); date.setFullYear(2021); setCookie(obj,date);
使用reduce獲取多個(gè)cookie值
var o=getCookie(); console.log(o); function getCookie(){ return document.cookie.split('; ').reduce((value,item)=>{ var arr=item.split('='); value[arr[0]]=isNaN(arr[1]) ? arr[1] : Number(arr[1]);//數(shù)字(年齡)需要轉(zhuǎn)為數(shù)值型 return value; },{}); }
關(guān)于cookie安全
XSS攻擊:XSS攻擊通常指的是通過(guò)利用網(wǎng)頁(yè)開發(fā)時(shí)留下的漏洞,通過(guò)巧妙的方法注入惡意指令代碼到網(wǎng)頁(yè),使用戶加載并執(zhí)行攻擊者惡意制造的網(wǎng)頁(yè)程序(百度百科)。
XSS攻擊需要具備的條件:
1. 必須是同一個(gè)域當(dāng)中頁(yè)面的表單提交,必須有文本內(nèi)容提交
2. 提交的內(nèi)容需要被放置在頁(yè)面中,例如評(píng)論等內(nèi)容
3. 在提交的文本中出現(xiàn)script標(biāo)簽,并且這個(gè)標(biāo)簽沒(méi)有被替代,直接放入在頁(yè)面中
4. 這個(gè)頁(yè)面可以被所有用戶查看到
5. 這個(gè)script標(biāo)簽具備一定的盜竊cookie特征
解決辦法
提交頁(yè)面時(shí)將script標(biāo)簽過(guò)濾再提交;
但可以通過(guò)插入圖片的超鏈接,點(diǎn)擊是執(zhí)行JavaScript腳本; 遇到這種時(shí)就需要將JavaScript腳本替換
關(guān)于cookie安全還要其他攻擊方式這里只簡(jiǎn)單介紹一下cookie,深入了解請(qǐng)上網(wǎng)查詢資料。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. 使用Docker的NFS-Ganesha鏡像搭建nfs服務(wù)器的詳細(xì)過(guò)程2. Django使用HTTP協(xié)議向服務(wù)器傳參方式小結(jié)3. 刪除docker里建立容器的操作方法4. VMware中如何安裝Ubuntu5. Docker 部署 Prometheus的安裝詳細(xì)教程6. IntelliJ IDEA導(dǎo)入jar包的方法7. IntelliJ IDEA恢復(fù)刪除文件的方法8. 使用 kind 和 Docker 啟動(dòng)本地的 Kubernetes環(huán)境9. docker /var/lib/docker/aufs/mnt 目錄清理方法10. IntelliJ IDEA配置Tomcat服務(wù)器的方法
