日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 前端技术 > javascript >内容正文

javascript

JavaScript中的document.cookie的使用

發(fā)布時(shí)間:2023/12/15 javascript 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JavaScript中的document.cookie的使用 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

我們已經(jīng)知道,在document對(duì)象中有一個(gè)cookie屬性。但是Cookie又是什么?“某些Web站點(diǎn)在您的硬盤(pán)上用很小的文本文件存儲(chǔ)了一些信息,這些文件就稱(chēng)為Cookie。”——MSIE幫助。一般來(lái)說(shuō),Cookies是CGI或類(lèi)似,比HTML高級(jí)的文件、程序等創(chuàng)建的,但是javascript也提供了對(duì)Cookies的很全面的訪(fǎng)問(wèn)權(quán)利。

  我們先要學(xué)一學(xué)Cookie的基本知識(shí)。

  每個(gè)Cookie都是這樣的:<cookie名>=<值>

  <cookie名>的限制與javascript的命名限制大同小異,少了“不能用javascript關(guān)鍵字”,多了“只能用可以用在URL編碼中的字符”。后者比較難懂,但是只要你只用字母和數(shù)字命名,就完全沒(méi)有問(wèn)題了。<值>的要求也是“只能用可以用在URL編碼中的字符”。

  每個(gè)Cookie都有失效日期,一旦電腦的時(shí)鐘過(guò)了失效日期,這個(gè)Cookie就會(huì)被刪掉。我們不能直接刪掉一個(gè)Cookie,但是可以用設(shè)定失效日期早于現(xiàn)在時(shí)刻的方法來(lái)間接刪掉它。

  每個(gè)網(wǎng)頁(yè),或者說(shuō)每個(gè)站點(diǎn),都有它自己的Cookies,這些Cookies只能由這個(gè)站點(diǎn)下的網(wǎng)頁(yè)來(lái)訪(fǎng)問(wèn),來(lái)自其他站點(diǎn)或同一站點(diǎn)下未經(jīng)授權(quán)的區(qū)域的網(wǎng)頁(yè),是不能訪(fǎng)問(wèn)的。每一“組”Cookies有規(guī)定的總大小(大約2KB每“組”),一超過(guò)最大總大小,則最早失效的Cookie先被刪除,來(lái)讓新的Cookie“安家”。

  現(xiàn)在我們來(lái)學(xué)習(xí)使用documents.cookie屬性。

  如果直接使用documents.cookie屬性,或者說(shuō),用某種方法,例如給變量賦值,來(lái)獲得documents.cookie的值,我們就可以知道在現(xiàn)在的文檔中有多少個(gè)Cookies,每個(gè)Cookies的名字,和它的值。例如,在某文檔中添加“document.write(documents.cookie)”,結(jié)果顯示:

name=kevin;email=kevin@kevin.com;lastvisited=index.html

這意味著,文檔包含3個(gè)Cookies:name,email和lastvisited,它們的值分別是kevin,kevin@kevin.com和index.html。可以看到,兩個(gè)Cookies之間是用分號(hào)和空格隔開(kāi)的,于是我們可以用cookieString.split(';')方法得到每個(gè)Cookie分開(kāi)的一個(gè)數(shù)組(先用varcookieString=documents.cookie)。

  設(shè)定一個(gè)Cookie的方法是對(duì)documents.cookie賦值。與其它情況下的賦值不同,向documents.cookie賦值不會(huì)刪除掉原有的Cookies,而只會(huì)增添Cookies或更改原有Cookie。賦值的格式:

documents.cookie='cookieName='+escape('cookievalue')
+';expires='+expirationDateObj.toGMTString();

是不是看到頭暈了呢?cookieName表示Cookie的名稱(chēng),cookievalue表示Cookie的值,expirationDateObj表示儲(chǔ)存著失效日期的日期對(duì)象名,如果不需要指定失效日期,則不需要第二行。不指定失效日期,則瀏覽器默認(rèn)是在關(guān)閉瀏覽器(也就是關(guān)閉所有窗口)之后過(guò)期。

  首先escape()方法:為什么一定要用?因?yàn)镃ookie的值的要求是“只能用可以用在URL編碼中的字符”。我們知道“escape()”方法是把字符串按URL編碼方法來(lái)編碼的,那我們只需要用一個(gè)“escape()”方法來(lái)處理輸出到Cookie的值,用“unescape()”來(lái)處理從Cookie接收過(guò)來(lái)的值就萬(wàn)無(wú)一失了。而且這兩個(gè)方法的最常用途就是處理Cookies。其實(shí)設(shè)定一個(gè)Cookie只是“documents.cookie='cookieName=cookievalue'”這么簡(jiǎn)單,但是為了避免在cookievalue中出現(xiàn)URL里不準(zhǔn)出現(xiàn)的字符,還是用一個(gè)escape()好。
  然后“expires”前面的分號(hào):注意到就行了。是分號(hào)而不是其他。
  最后toGMTString()方法:設(shè)定Cookie的時(shí)效日期都是用GMT格式的時(shí)間的,其它格式的時(shí)間是沒(méi)有作用的。

  現(xiàn)在我們來(lái)實(shí)戰(zhàn)一下。設(shè)定一個(gè)“name=rose”的Cookie,在3個(gè)月后過(guò)期。

varexpires=newDate();
expires.setTime(expires.getTime()+3*30*24*60*60*1000);
/*三個(gè)月x一個(gè)月當(dāng)作30天x一天24小時(shí)
x一小時(shí)60分x一分60秒x一秒1000毫秒*/
documents.cookie='name=rose;expires='+expires.toGMTString();

為什么沒(méi)有用escape()方法?這是因?yàn)槲覀冎纑ose是一個(gè)合法的URL編碼字符串,也就是說(shuō),'rose'==escape('rose')。一般來(lái)說(shuō),如果設(shè)定Cookie時(shí)不用escape(),那獲取Cookie時(shí)也不用unescape()。

  再來(lái)一次:編寫(xiě)一個(gè)函數(shù),作用是查找指定Cookie的值。

functiongetCookie(cookieName){
varcookieString=documents.cookie;
varstart=cookieString.indexOf(cookieName+'=');
//加上等號(hào)的原因是避免在某些Cookie的值里有
//與cookieName一樣的字符串。
if(start==-1)//找不到
returnnull;
start+=cookieName.length+1;
varend=cookieString.indexOf(';',start);
if(end==-1)returnunescape(cookieString.substring(start));
returnunescape(cookieString.substring(start,end));
}

這個(gè)函數(shù)用到了字符串對(duì)象的一些方法,如果你不記得了(你是不是這般沒(méi)記性啊),請(qǐng)快去查查。這個(gè)函數(shù)所有的if語(yǔ)句都沒(méi)有帶上else,這是因?yàn)槿绻麠l件成立,程序運(yùn)行的都是return語(yǔ)句,在函數(shù)里碰上return,就會(huì)終止運(yùn)行,所以不加else也沒(méi)問(wèn)題。該函數(shù)在找到Cookie時(shí),就會(huì)返回Cookie的值,否則返回“null”。

  現(xiàn)在我們要?jiǎng)h除剛才設(shè)定的name=roseCookie。

varexpires=newDate();
expires.setTime(expires.getTime()-1);
documents.cookie='name=rose;expires='+expires.toGMTString();

可以看到,只需要把失效日期改成比現(xiàn)在日期早一點(diǎn)(這里是早1毫秒),再用同樣的方法設(shè)定Cookie,就可以刪掉Cookie了。

附一個(gè)老外寫(xiě)的js操作cookie的函數(shù):

///設(shè)置cookie
functionsetCookie(NameOfCookie,value,expiredays)
{
//@參數(shù):三個(gè)變量用來(lái)設(shè)置新的cookie:
//cookie的名稱(chēng),存儲(chǔ)的Cookie值,
//以及Cookie過(guò)期的時(shí)間.
//這幾行是把天數(shù)轉(zhuǎn)換為合法的日期

varExpireDate=newDate();
ExpireDate.setTime(ExpireDate.getTime()+(expiredays*24*3600*1000));

//下面這行是用來(lái)存儲(chǔ)cookie的,只需簡(jiǎn)單的為"document.cookie"賦值即可.
//注意日期通過(guò)toGMTstring()函數(shù)被轉(zhuǎn)換成了GMT時(shí)間。

document.cookie=NameOfCookie+"="+escape(value)+
((expiredays==null)?"":";expires="+ExpireDate.toGMTString());
}

///獲取cookie值
functiongetCookie(NameOfCookie)
{

//首先我們檢查下cookie是否存在.
//如果不存在則document.cookie的長(zhǎng)度為0

if(document.cookie.length>0)
{

//接著我們檢查下cookie的名字是否存在于document.cookie

//因?yàn)椴恢挂粋€(gè)cookie值存儲(chǔ),所以即使document.cookie的長(zhǎng)度不為0也不能保證我們想要的名字的cookie存在
//所以我們需要這一步看看是否有我們想要的cookie
//如果begin的變量值得到的是-1那么說(shuō)明不存在

begin=document.cookie.indexOf(NameOfCookie+"=");
if(begin!=-1)
{

//說(shuō)明存在我們的cookie.

begin+=NameOfCookie.length+1;//cookie值的初始位置
end=document.cookie.indexOf(";",begin);//結(jié)束位置
if(end==-1)end=document.cookie.length;//沒(méi)有;則end為字符串結(jié)束位置
returnunescape(document.cookie.substring(begin,end));}
}

returnnull;

//cookie不存在返回null
}

///刪除cookie
functiondelCookie(NameOfCookie)
{
//該函數(shù)檢查下cookie是否設(shè)置,如果設(shè)置了則將過(guò)期時(shí)間調(diào)到過(guò)去的時(shí)間;
//剩下就交給操作系統(tǒng)適當(dāng)時(shí)間清理cookie啦

if(getCookie(NameOfCookie)){
document.cookie=NameOfCookie+"="+
";expires=Thu,01-Jan-7000:00:01GMT";
}
}

演示文件

<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<htmlxmlns="http://www.w3.org/1999/xhtml">
<head>
<metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/>
<title>Cookie</title>
<mce:styletype="text/css"><!--

#welcomeh3
{
font-weight:normal;
color:#800;
}
--></mce:style><styletype="text/css"mce_bogus="1">
#welcomeh3
{
font-weight:normal;
color:#800;
}</style>
<mce:scripttype="text/javascript"src="http://skybirdzw.blog.163.com/blog/cookie.js"mce_src="http://skybirdzw.blog.163.com/blog/cookie.js"></mce:script>
<mce:scripttype="text/javascript"><!--


//---------------使用cookie----------------------
functionuseCookie()
{
varusername=getCookie("username");
if(username!=null){
document.getElementById('welcome').innerHTML="<h3>歡迎您,"+username+"</h3>"+"<buttonοnclick='delusr();'>刪除用戶(hù)名</button>";
}else{
varstr="<h3>歡迎您,游客!</h3>"+
"<inputid='usrname'type='text'/>"+
"<buttonid='saveusr'οnclick='checksave();'>保存用戶(hù)名</button>";
document.getElementById('welcome').innerHTML=str;
}
}

functionchecksave()
{
varel=document.getElementById('usrname');
if(el.value){
setCookie("username",el.value);
location.reload();//刷新頁(yè)面
}
else
alert("輸入框不能為空");
}

functiondelusr()
{
delCookie("username");
location.reload();
}
//--></mce:script>
</head>
<bodyonload="useCookie();">
<divid="welcome">
</div>
</body>
</html>

轉(zhuǎn)載于:https://blog.51cto.com/foreverzpk/1325510

總結(jié)

以上是生活随笔為你收集整理的JavaScript中的document.cookie的使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。