JavaScript是運行在客戶端的腳本,因此一般是不能夠設置Session的,因為Session是運行在服務器端的。
而cookie是運行在客戶端的,所以可以用JS來設置cookie.
假設有這樣一種情況,在某個用例流程中,由A頁面跳至B頁面,若在A頁面中采用JS用變量temp保存了某一變量的值,在B頁面的時候,同樣需要使用JS來引用temp的變量值,對於JS中的全局變量或者靜態變量的生命周期是有限的,當發生頁面跳轉或者頁面關閉的時候,這些變量的值會重新載入,即沒有達到保存的效果。解決這個問題的最好的方案是采用cookie來保存該變量的值,那么如何來設置和讀取cookie呢?
首先需要稍微了解一下cookie的結構,簡單地說:cookie是以鍵值對的形式保存的,即key=value的格式。各個cookie之間一般是以“;”分隔。
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>關於Cookie</title>
<script>
/*
cookie:存儲數據,當用戶訪問了某個網站(網頁)的時候,我們就可以通過cookie來像訪問者電腦上存儲數據;
1、不同的瀏覽器存放的cookie位置不一樣,也是不能通用的;
2、cookie的存儲是以域名的方式進行區分的;
3、cookie的數據是可以設置名字的,j.name=Jack
4、一個域名下存放的cookie的個數是有限制的,不同瀏覽器存放的個數不一樣;
5、每個cookie存放的內容大小也是限制的,不同的瀏覽器存放大小限制不一樣;
我們通過document.cookie來獲取當前網站下的cookie的時候,得到的是字符串的形式的值,它包含了
當前網站下的所有cookie,它會把所有cookie通過一個分號+空格的形式串聯起來。
我們想長時間存放一個cookie,需要在設置這個cookie的時候必須設置一個過期時間;
document.cookie='名稱=值;expires='+(字符串格式的)時間;
cookie默認是臨時存儲,當瀏覽器關閉進程的時候,自動銷毀;
*/
//document.cookie='名字=值';
//document.cookie='name=Jack';
//document.cookie='pwd=123456';
//設置一個過期時間
//var oDate=new Date();
//oDate.setDate(oDate.getDate()+7);//設置為當前時間起算7天后過期
//document.cookie='name=Jack;expires='+oDate.toGMTString();
//alert(typeof oDate);//odate類型是object類型,需要轉換為字符串;
//alert(oDate.getDate()); //獲取的是當前月份的日號,如5月25,輸出的是25
//讀取cookie:document.cookie;
//alert(document.cookie);//name=Jack; pwd=123456
//內容最好編碼存放,編碼--encodeURI(),解碼--decodeURI()
//document.cookie='name='+encodeURI('Jack\n您好')+';expires='+oDate.toGMTString();//name=Jack%0A%E6%82%A8%E5%A5%BD; pwd=123456
//alert(decodeURI(document.cookie));//name=Jack 您好; pwd=123456
setCookie("name","Tom",5);
alert( getCookie("name"));
removeCookie("name");
/*
封裝
*/
function setCookie(key,value,t)
{
var oDate=new Date();
oDate.setDate(oDate.getDate()+t);
document.cookie=key+"="+value+"; expires="+oDate.toDateString();
}
function getCookie(key){
var arr1=document.cookie.split("; ");//由於cookie是通過一個分號+空格的形式串聯起來的,所以這里需要先按分號空格截斷,變成[name=Jack,pwd=123456,age=22]數組類型;
for(var i=0;i<arr1.length;i++){
var arr2=arr1[i].split("=");//通過=截斷,把name=Jack截斷成[name,Jack]數組;
if(arr2[0]==key){
return decodeURI(arr2[1]);
}
}
}
//封裝一個移除cookie的函數
function removeCookie(key){
setCookie(key,"",-1);//把cookie設置為過期
}
</script>
</head>
<body>
</body>
</html>
例子:
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>記住cookie效果</title>
<script>
/*
封裝*/
window.onload=function(){
var oName=document.getElementById("username");
var oBtn=document.getElementById("btn");
var oDel=document.getElementById("del");
//判斷當前cookie是否有值,---即判斷getCookie()函數的返回值是否有
if(getCookie("Username")){
oName.value=getCookie("Username");
}else{
oName.value="請輸入賬戶名";
}
oBtn.onclick=function(){
alert("登錄成功");
setCookie("Username",oName.value,5);
}
oDel.onclick=function(){
removeCookie("Username");
oName.value="";
}
}
function setCookie(key,value,t)
{ if(t>0){
var oDate=new Date();
oDate.setDate(oDate.getDate()+t);
document.cookie=key+"="+value+"; expires="+oDate.toDateString();
}
}
function getCookie(key){
var arr1=document.cookie.split("; ");//由於cookie是通過一個分號+空格的形式串聯起來的,所以這里需要先按分號空格截斷,變成[name=Jack,pwd=123456,age=22]數組類型;
for(var i=0;i<arr1.length;i++){
var arr2=arr1[i].split("=");//通過=截斷,把name=Jack截斷成[name,Jack]數組;
if(arr2[0]==key){
return decodeURI(arr2[1]);
}
}
}
//封裝一個移除cookie的函數
function removeCookie(key){
setCookie(key,"",-1);//把cookie設置為過期
}
// removeCookie("name");
</script>
</head>
<body>
<input type="text" id="username">
<input type="button" value="登錄" id="btn">
<input type="button" value="清除cookie" id="del">
</body>
</html>