首頁 > web前端 > js教程 > javascript怎麼設定cookie

javascript怎麼設定cookie

青灯夜游
發布: 2023-01-05 16:09:41
原創
20207 人瀏覽過

在javascript中,可以使用document物件的cookie屬性來設定、讀取或刪除cookie,語法「document.cookie="cookieName=Value;expires=過期時間";」。

javascript怎麼設定cookie

本教學操作環境:windows7系統、javascript1.8.5版、Dell G3電腦。

1,什麼是cookie

    把web頁面載入到瀏覽器所使用的HTTP是一種"無狀態"協定,也是說,當伺服器把頁面傳送給瀏覽器之後,它就認為事物完成了,並沒有保存任何資訊。這給在瀏覽器會話期間維持某種連續性帶來了困難,例如記錄使用者已經造訪或下載過哪些內容,或記錄使用者在私有區域的登入狀態。

    cookie就是解決這個問題的一個方法。舉例來說,cookie可以記錄使用者的最後一次訪問,儲存使用者偏好設定的列表,或是當使用者繼續購物時儲存購物車裡的物品。在正確使用的情況下,cookie能夠改善網站的使用者體驗。

    cookie本身是一些短小的資訊串,能夠由頁面保存在使用者的電腦上,然後可以被其他頁面讀取。 cookie一般都設定在一定時間後失效。

cookie的限制

    瀏覽器對於能儲存的cookie數量有所限制,通常是數百個或多一點。一般情況下,每個網域20個cookies是允許的,而每個網域最多能保存4KB的cookie。

    除了大小限制可能導致的問題,有很多原因都可能導致硬碟上的cookie消失,例如到達有效期了,或是用戶清理cookie資訊了,或是換用其他瀏覽器了。因此,永遠都不應該使用cookie來保存重要數據,而且在編寫程式碼時一定要考慮到不能獲取到所期望cookie時的情況

2,document.cookie屬性

JavaScript使用document物件的cookie屬性來建立、讀取、刪除cookie。

每個cookie基本上就是一個由成對的名稱和值組成的字串,像下面這樣:

username=sam
登入後複製

    當頁面載入到瀏覽器裡,瀏覽器會收集與頁面相關的全部cookie,放到類似字串的document.cookie屬性裡。在這個屬性裡,每個cookie是以分號分隔的:

username=sam;location=China;
登入後複製

#我講document.cookie稱作"類似字串"的屬性,因為它並不是真正的字串,只是在提取當 cookie資訊時,這個屬性表現得像個字串而已

資料的編碼和解碼

    某些字元不能在cookie裡使用,包括分號,逗號以及空白符號(例如空格和製表符)。在把資料儲存到cookie之前,需要先對資料進行編碼,以便於實現正確的儲存。

    在儲存資訊之前,使用JavaScript的escape()函數進行編碼,而取得原始的cookie資料時就使用對應的unescape()函數進行解碼。

    excape()函數把字串裡任何非ASCII字元都轉換為對應的2位元或4為十六進位格式,例如空格轉換為 ,&轉換為&。

    舉例來說,下面的程式碼會輸出變數str裡保存的原始字串及escape()編碼以後的結果:

<html>
<head>
<script>
function hello(){
	var str = &#39;Here is a (short) piece of text.&#39;;
	document.write(str = &#39;<br />&#39; + escape(str));
	}
</script>
</head>
<body>
<div id="div1">hello owrld</br>
<input type="button" name="111" οnclick="hello()" value = "来按我呀">
</div>
</body>
</html>
登入後複製

    可以看到空格被表示為,左括號是(,右括號是)。

3,cookie組成

    document.cookie裡的資訊看起來就像是由成對的名稱和值組成的字串,每一對資料的形式是:

name=value
登入後複製

    但實際上,每個cookie還包含其他一些相關信息,下面來分別介紹。

cookieName 和 cookieValue

    cookieName和cookieValue就是在cookie字串裡看到的name=value裡的名稱和值。

domain

    domain屬性向瀏覽器指明cookie屬於哪個網域。這個屬性是可選的,在沒有指定時,預設值是設定cookie的頁面所在的網域。

    這個屬性的功能在於控制子域對cookie的運作。距離來說,如果設定為www.example.com,那麼子網域code.example.com裡的頁面就不能讀取這個cookie。但如果domain屬性設定為example.com,那麼code.example.com裡的頁面就能造訪這個cookie了。

path

    path屬性指定可以使用cookie的目錄。如果只想讓目錄documents裡的頁面設定cookie的值,就把path設定為/documents。這個屬性是可選的,常用的預設路徑是/,表示cookie可以在整個網域中使用。

secure

secure属性是可选的,而且几乎很少使用。它表示浏览器在把整个cookie发送给服务器时,是否应该使用SLL安全标准。

expires

每个cookie都有一个失效日期,过期就自动删除了。expires属性要以UTC时间表示。如果没有设置这个属性,cookie的生命期就和当前浏览器会话一样长,会在浏览器关闭时自动删除。

4,编写cookie

要编写新的cookie,只要把包含所需属性的值赋予document.cookie就可以了:

document.cookie = "username=sam;expires=15/05/2018 00:00:00"
登入後複製

使用javascript的Date对象可以避免手工输入日期和时间格式;

var cookieDate = new Date(2018,05,15);
document.cookie = "username=sam;expires="+cookieDate.toUTCString();
登入後複製

这样就能达到和前面一样的结果。

#注意这里使用了cookieDate.toUTCString()函数,而不是cookieDate.toString();这是因为cookie的时间要以UTC格式设置。

在实际编码时,应该用excape()函数来确保在给cookie赋值时不会有非法字符:

var cookieDate = new Date(2018,05,15);
var user = "Sam Jones";
document.cookie = "username="+excape(user)+";expires="+cookieDate.toUTCString();
登入後複製

5,编写cookie的函数

很自然就会想到编写一个函数专门用于生成cookie,完成编码和可选属性的组合操作。下面的程序清单就列出了一个这样的程序代码:

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;
		}
登入後複製

    这个函数的执行的操作是相当直观的,name和value参数组合得到"name = value",其中的value还经过编码以避免非法字符。

    在处理有效期时,使用的参数不是具体日期,而是cookie有效的天数。函数根据这个天数生成有效的日期字符串。

    其他属性都是可选的,如果设置了,就会附加到组成cookie的字符串里。

【推荐学习:javascript高级教程

以上是javascript怎麼設定cookie的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板