這篇文章給大家分享的是有關(guān)javascript如何設(shè)置cookie的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過來看看吧。
十載的巴馬網(wǎng)站建設(shè)經(jīng)驗(yàn),針對設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。成都全網(wǎng)營銷的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整巴馬建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)從事“巴馬網(wǎng)站設(shè)計(jì)”,“巴馬網(wǎng)站推廣”以來,每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。
在javascript中,可以使用document對象的cookie屬性來設(shè)置、讀取或刪除cookie,語法“document.cookie="cookieName=Value;expires=過期時(shí)間";”。
本教程操作環(huán)境:windows7系統(tǒng)、javascript1.8.5版、Dell G3電腦。
1,什么是cookie
把web頁面加載到瀏覽器所使用的HTTP是一種"無狀態(tài)"協(xié)議,也就是說,當(dāng)服務(wù)器把頁面發(fā)送給瀏覽器之后,它就認(rèn)為事物完成了,并不保存任何信息。這給在瀏覽器會(huì)話期間維持某種連續(xù)性帶來了困難,比如記錄用戶已經(jīng)訪問或下載過哪些內(nèi)容,或是記錄用戶在私有區(qū)域的登錄狀態(tài)。
cookie就是解決這個(gè)問題的一個(gè)途徑。舉例來說,cookie可以記錄用戶的最后一次訪問,保存用戶偏好設(shè)置的列表,或是當(dāng)用戶繼續(xù)購物時(shí)保存購物車?yán)锏奈锲?。在正確使用的情況下,cookie能夠改善站點(diǎn)的用戶體驗(yàn)。
cookie本身是一些短小的信息串,能夠由頁面保存在用戶的計(jì)算機(jī)上,然后可以被其他頁面讀取。cookie一般都設(shè)置為在一定時(shí)間后失效。
cookie的局限
瀏覽器對于能保存的cookie數(shù)量有所限制,通常是幾百個(gè)或多一點(diǎn)。一般情況下,每個(gè)域名20個(gè)cookies是允許的,而每個(gè)域最多能保存4KB的cookie。
除了大小限制可能導(dǎo)致的問題,有很多原因都可能導(dǎo)致硬盤上的cookie消失,比如到達(dá)有效期了,或是用戶清理cookie信息了,或是換用其他瀏覽器了。因此,永遠(yuǎn)都不應(yīng)該使用cookie保存重要數(shù)據(jù),而且在編寫代碼時(shí)一定要考慮到不能獲取到所期望cookie時(shí)的情況
2,document.cookie屬性
JavaScript使用document對象的cookie屬性來創(chuàng)建 、讀取及刪除cookie。
每個(gè)cookie基本上就是一個(gè)由成對的名稱和值組成的字符串,像下面這樣:
username=sam
當(dāng)頁面加載到瀏覽器里,瀏覽器會(huì)收集與頁面相關(guān)的全部cookie,放到類似字符串的document.cookie屬性里。在這個(gè)屬性里,每個(gè)cookie是以分號分隔的:
username=sam;location=China;
#我講document.cookie稱作"類似字符串"的屬性,因?yàn)樗⒉皇钦嬲淖址皇窃谔崛ookie信息時(shí),這個(gè)屬性表現(xiàn)得像個(gè)字符串而已
數(shù)據(jù)的編碼和解碼
某些字符不能在cookie里使用,包括分號,逗號以及空白符號(比如空格和制表符)。在把數(shù)據(jù)存儲到cookie之前,需要對數(shù)據(jù)進(jìn)行編碼,以便于實(shí)現(xiàn)正確的存儲。
在存儲信息之前,使用JavaScript的escape()函數(shù)進(jìn)行編碼,而獲得原始的cookie數(shù)據(jù)時(shí)就使用相應(yīng)的unescape()函數(shù)進(jìn)行解碼。
excape()函數(shù)把字符串里任何非ASCII字符都轉(zhuǎn)換為相應(yīng)的2位或4為十六進(jìn)制格式,比如空格轉(zhuǎn)換為%20,&轉(zhuǎn)換為%26。
舉例來說,下面的代碼會(huì)輸出變量str里保存的原始字符串及escape()編碼以后的結(jié)果:
<html> <head> <script> function hello(){ var str = 'Here is a (short) piece of text.'; document.write(str = '<br />' + escape(str)); } </script> </head> <body> <div id="div1">hello owrld</br> <input type="button" name="111" οnclick="hello()" value = "來按我呀"> </div> </body> </html>
可以看到空格被表示為%20,左括號是%28,右括號是%29。
3,cookie組成
document.cookie里的信息看上去就像是由成對的名稱和值組成的字符串,每一對數(shù)據(jù)的形式是:
name=value
但實(shí)際上,每個(gè)cookie還包含其他一些相關(guān)信息,下面來分別介紹。
cookieName 和 cookieValue
cookieName和cookieValue就是在cookie字符串里看到的name=value里的名稱和值。
domain
domain屬性向?yàn)g覽器指明cookie屬于哪個(gè)域。這個(gè)屬性是可選的,在沒有指定時(shí),默認(rèn)值是設(shè)置cookie的頁面所在的域。
這個(gè)屬性的作用在于控制子域?qū)ookie的操作。距離來說,如果設(shè)置其為www.example.com,那么子域code.example.com里的頁面就不能讀取這個(gè)cookie。但如果domain屬性設(shè)置為example.com,那么code.example.com里的頁面就能訪問這個(gè)cookie了。
path
path屬性指定可以使用cookie的目錄。如果只想讓目錄documents里的頁面設(shè)置cookie的值,就把path設(shè)置為/documents。這個(gè)屬性是可選的,常用的默認(rèn)路徑是/,表示cookie可以在整個(gè)域中使用。
secure
secure屬性是可選的,而且?guī)缀鹾苌偈褂?。它表示瀏覽器在把整個(gè)cookie發(fā)送給服務(wù)器時(shí),是否應(yīng)該使用SLL安全標(biāo)準(zhǔn)。
expires
每個(gè)cookie都有一個(gè)失效日期,過期就自動(dòng)刪除了。expires屬性要以UTC時(shí)間表示。如果沒有設(shè)置這個(gè)屬性,cookie的生命期就和當(dāng)前瀏覽器會(huì)話一樣長,會(huì)在瀏覽器關(guān)閉時(shí)自動(dòng)刪除。
4,編寫cookie
要編寫新的cookie,只要把包含所需屬性的值賦予document.cookie就可以了:
document.cookie = "username=sam;expires=15/05/2018 00:00:00"
使用javascript的Date對象可以避免手工輸入日期和時(shí)間格式;
var cookieDate = new Date(2018,05,15); document.cookie = "username=sam;expires="+cookieDate.toUTCString();
這樣就能達(dá)到和前面一樣的結(jié)果。
#注意這里使用了cookieDate.toUTCString()函數(shù),而不是cookieDate.toString();這是因?yàn)閏ookie的時(shí)間要以UTC格式設(shè)置。
在實(shí)際編碼時(shí),應(yīng)該用excape()函數(shù)來確保在給cookie賦值時(shí)不會(huì)有非法字符:
var cookieDate = new Date(2018,05,15); var user = "Sam Jones"; document.cookie = "username="+excape(user)+";expires="+cookieDate.toUTCString();
5,編寫cookie的函數(shù)
很自然就會(huì)想到編寫一個(gè)函數(shù)專門用于生成cookie,完成編碼和可選屬性的組合操作。下面的程序清單就列出了一個(gè)這樣的程序代碼:
function createCookie(name,value,days,path,domain,secure){ if(days){ var date = new Date(); date.setTime(date.getTime()+(days*24*60*60*1000)); var expires = date.toGMTString(); } else var expires = ""; cookieString = name + "=" +excape(value); if(expires) cookieString += ";expires=" +expires; if(path) cookieString += ";path=" + escape(path); if(domain) cookieString += ";domain=" + escape(domain); if(secure) cookieString += ";secure=" + escape(secure); document.cookie = sookieString; }
這個(gè)函數(shù)的執(zhí)行的操作是相當(dāng)直觀的,name和value參數(shù)組合得到"name = value",其中的value還經(jīng)過編碼以避免非法字符。
在處理有效期時(shí),使用的參數(shù)不是具體日期,而是cookie有效的天數(shù)。函數(shù)根據(jù)這個(gè)天數(shù)生成有效的日期字符串。
其他屬性都是可選的,如果設(shè)置了,就會(huì)附加到組成cookie的字符串里。
感謝各位的閱讀!關(guān)于“javascript如何設(shè)置cookie”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!
網(wǎng)頁題目:javascript如何設(shè)置cookie
標(biāo)題鏈接:http://www.rwnh.cn/article40/gshseo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版、外貿(mào)建站、網(wǎng)站建設(shè)、關(guān)鍵詞優(yōu)化、虛擬主機(jī)、ChatGPT
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)