JavaScript是運(yùn)行在客戶端的腳本,一般是不能夠直接設(shè)置Session的,因?yàn)镾ession是運(yùn)行在服務(wù)器端的。而cookie是運(yùn)行在客戶端的,所以可以用JS來(lái)設(shè)置cookie.
cookie是以鍵值對(duì)的形式保存的,多個(gè)cookie之間用‘ ; ’分隔開(kāi);
假如在A頁(yè)面中要保存username 的值(“xiaomi”)到cookie 中,key的值是name,則代碼如下:
document.cookie=“name=” + username;
JS讀取cookie:
假設(shè)cookie中存儲(chǔ)的內(nèi)容為:name=jack;password=123
則在B頁(yè)面中獲取變量username的值的JS代碼如下:
var username=document.cookie.split(";")[0].split("=")[1]; 注1
注:split 是將字符串分割成字符串?dāng)?shù)組
stringObject.split(separator,how many)
第一個(gè)參數(shù)是必需的? 可以是字符串或正則表達(dá)式,從該參數(shù)指定的地方分割 stringObject。
第二個(gè)參數(shù)是 可選的? 數(shù)組可以分割的最大長(zhǎng)度? 省略表示整個(gè)字符串都會(huì)被分割,不考慮長(zhǎng)度
//JS操作cookies方法!
//寫(xiě)cookies
function setCookie(name,value)
{
var Days = 30;
var exp = new Date();
exp.setTime(exp.getTime() + Days*24*60*60*1000);
document.cookie = name + "="+ escape (value) + ";expires=" + exp.toGMTString();
}
注:
escape (value) 返回一個(gè)包含了 charstring 內(nèi)容的字符串值( Unicode 格式)
toGMTString() 方法可根據(jù)格林威治時(shí)間 (GMT) 把 Date 對(duì)象轉(zhuǎn)換為字符串,并返回結(jié)果。
expires 屬性見(jiàn)下面
//獲取cookie
function getCookie(name)
{
var arr,reg=new RegExp("(^| )"+name+"=([^;]*)(;|$)");
if(arr=document.cookie.match(reg))
return unescape(arr[2]);
else
return null;
}
//刪除cookie
function delCookie(name)
{
var exp = new Date();
exp.setTime(exp.getTime() - 1);
var cval=getCookie(name);
if(cval!=null)
document.cookie= name + "="+cval+";expires="+exp.toGMTString();
}
//使用示例
setCookie("name","hayden");
alert(getCookie("name"));
alert(delCookie("name"));
//如果需要設(shè)定自定義過(guò)期時(shí)間
//那么把上面的setCookie 函數(shù)換成下面兩個(gè)函數(shù)就ok;
//程序代碼
function setCookie(name,value,time)
{
var strsec = getsec(time);
var exp = new Date();
exp.setTime(exp.getTime() + strsec*1);
document.cookie = name + "="+ escape (value) + ";expires=" + exp.toGMTString();
}
function getsec(str)
{
alert(str);
var str1=str.substring(1,str.length)*1;
var str2=str.substring(0,1);
if (str2=="s")
{
return str1*1000;
}
else if (str2=="h")
{
return str1*60*60*1000;
}
else if (str2=="d")
{
return str1*24*60*60*1000;
}
}
//這是有設(shè)定過(guò)期時(shí)間的使用示例:
//s20是代表20秒
//h是指小時(shí),如12小時(shí)則是:h12
//d是天數(shù),30天則:d30
setCookie("name","hayden","s20");
?
expires屬性:
指定了cookie的生存期,默認(rèn)情況下cookie 是暫時(shí)存在的,他們存在的值只在瀏覽器會(huì)話期間存在,當(dāng)用戶退出瀏覽器后這些值也會(huì)丟失,如果想讓cookie 存在一段時(shí)間,就要為expires 屬性設(shè)置一個(gè)未來(lái)的一個(gè)過(guò)期日期,現(xiàn)在已經(jīng)被max-age 屬性取代,max-age用秒來(lái)設(shè)置cookie的生存期;
path屬性
它指定與cookie關(guān)聯(lián)在一起的網(wǎng)頁(yè),在默認(rèn)情況下cookie 會(huì)與創(chuàng)建他的網(wǎng)頁(yè),該網(wǎng)頁(yè)處于同一個(gè)目錄下的網(wǎng)頁(yè)以及與這個(gè)網(wǎng)頁(yè)所在的目錄下的子目錄下的網(wǎng)頁(yè)關(guān)聯(lián);
domain屬性:
domain屬性可以使多個(gè)web服務(wù)器共享cookie domain屬性的默認(rèn)值是創(chuàng)建cookie的網(wǎng)頁(yè)所在的服務(wù)器的主機(jī)名 不能將一個(gè)cookie的域設(shè)置成服務(wù)器所在的域之外的域;
例如讓位于order.example.com的服務(wù)器能夠讀取catalog.example.com設(shè)置的cookie值。如果catalog.example.com的頁(yè)面創(chuàng)建的cookie把自己的path屬性設(shè)置為“/”,把domain屬性設(shè)置成“.example.com”,那么所有位于catalog.example.com的網(wǎng)頁(yè)和所有位于orlders.example.com的網(wǎng)頁(yè),以及位于example.com域的其他服務(wù)器上的網(wǎng)頁(yè)都可以訪問(wèn)這個(gè)coolie。
secure屬性
他是一個(gè)布爾值 之低昂在網(wǎng)絡(luò)上傳輸cookie 默認(rèn)是不安全的,通過(guò)一個(gè)普通的http連接傳輸;