JS操做Cookies

一直都是簡單去js實現cookie的一些操做,今天把js對cookie操做系統的整理了一遍,包括:js讀取cookie,js添加cookie,js刪除cookie,示例以下:javascript

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
   <meta http-equiv="Content-Type" content="text/html; charset=GB2312" />
   <title>cookie處理函數練習(爲我所寫,非我所想:改善面向對象)</title>
   <mce:script language="JavaScript" type="text/javascript"><!--
   function addCookie(objName,objValue,objHours){//添加cookie
    var str = objName + "=" + escape(objValue);
    if(objHours > 0){//爲0時不設定過時時間,瀏覽器關閉時cookie自動消失
     var date = new Date();
     var ms = objHours*3600*1000;
     date.setTime(date.getTime() + ms);
     str += "; expires=" + date.toGMTString();
    }
    document.cookie = str;
    alert("添加cookie成功");
   }
  
   function getCookie(objName){//獲取指定名稱的cookie的值
    var arrStr = document.cookie.split("; ");
    for(var i = 0;i < arrStr.length;i ++){
     var temp = arrStr[i].split("=");
     if(temp[0] == objName) return unescape(temp[1]);
    }
   }
  
   function delCookie(name){//爲了刪除指定名稱的cookie,能夠將其過時時間設定爲一個過去的時間
    var date = new Date();
    date.setTime(date.getTime() - 10000);
    document.cookie = name + "=a; expires=" + date.toGMTString();
   }
  //讀取出來全部的cookie字筗串了
   function allCookie(){//讀取全部保存的cookie字符串
    var str = document.cookie;
    if(str == ""){
     str = "沒有保存任何cookie";
    }
    alert(str);
   }
  
   function $(m,n){
    return document.forms[m].elements[n].value;
   }
  
   function add_(){
    var cookie_name = $("myform","cookie_name");
    var cookie_value = $("myform","cookie_value");
    var cookie_expireHours = $("myform","cookie_expiresHours");
    addCookie(cookie_name,cookie_value,cookie_expireHours);
   }
  
   function get_(){
    var cookie_name = $("myform","cookie_name");
    var cookie_value = getCookie(cookie_name);
    alert(cookie_value);
   }
  
   function del_(){
    var cookie_name = $("myform","cookie_name");
    delCookie(cookie_name);
    alert("刪除成功");
   }
   
// --></mce:script>

//添加cookie
function addCookie(name,value,expires,path,domain){
 var str=name+"="+escape(value);
 if(expires!=""){
  var date=new Date();
  date.setTime(date.getTime()+expires*24*3600*1000);//expires單位爲天
  str+=";expires="+date.toGMTString();
 }
 if(path!=""){
  str+=";path="+path;//指定可訪問cookie的目錄
 }
 if(domain!=""){
  str+=";domain="+domain;//指定可訪問cookie的域
 }
 document.cookie=str;
}
//取得cookie
function getCookie(name){
 var str=document.cookie.split(";")
 for(var i=0;i<str.length;i++){
 var str2=str[i].split(」=」);
  if(str2[0]==name)return unescape(str2[1]);
 }
}
//刪除cookie
function delCookie(name){
 var date=new Date();
 date.setTime(date.getTime()-10000);
 document.cookie=name+」=n;expire=」+date.toGMTString();
}

//刪除全部cookie  
function delAllCookie()    
{    
    tmpArr = document.cookie.split(";");    
    delKey = new Array();    
    for(i in tmpArr)    
    {    
        if(tmpArr[i].indexOf("mykeywords") != -1)    
        {    
            delKey.push(decodeURIComponent(tmpArr[i].split("=")[0]));    
        }    
    }    
    today = new Date();    
    today.setTime(today.getTime() - 10000);    
    for(i in delKey)    
    {    
        name = delKey[i];    
        document.cookie = name+"='';expires="+today.toGMTString();    
    }    
    tmpArr = delKey = today = "";    
}




[下面講的經我的以爲比較好哦!]
咱們固然還得介紹cookie的四個屬性。這些屬性用下面的格式加到字符串值後面:

name=<value>[; expires=<date>][; domain=<domain>][; path=<path>][; secure]

名稱=<值>[; expires=<日期>][; domain=<域>][; path=<路徑>][; 安全]

<value>, <date>, <domain> 和 <path> 應當用對應的值替換。<date> 應當使用GMT格式,可使用Javascript腳本語言的日期類Date的.toGMTString() 方法獲得這一GMT格式的日期值。方括號表明這項是可選的。好比在 [; secure]兩邊的方括號表明要想把cookie設置成安全的,就須要把"; secure" 加到cookie字符串值的後面。若是"; secure" 沒有加到cookie字符串後面,那麼這個cookie就是不安全的。不要把尖括號<> 和方括號[] 加到cookie裏(除非它們是某些值的內容)。設置屬性時,不限屬性,能夠用任何順序設置。

下面是一個例子,在這個例子裏,cookie "username" 被設置成在15分鐘以後過時,能夠被服務器上的全部目錄訪問,能夠被"mydomain.com"域裏的全部服務器訪問,安全狀態爲安全。
// Date() 的構造器設置以毫秒爲單位   
// .getTime() 方法返回時間,單位爲毫秒   
// 因此要設置15分鐘到期,要用60000毫秒乘15分鐘   
var expiration = new Date((new Date()).getTime() + 15 * 60000);   
document.cookie = "username=" + escape(form.username.value)+ "; expires ="  
+ expiration.toGMTString() + "; path=" + "/" + "; _   
domain=" + "mydomain.com" + "; secure";   
  
// 咱們定義一個函數,用來讀取特定的cookie值。[獲得指定名字的cookie對象哦!]   
function getCookie(cookie_name)   
{   
	var allcookies = document.cookie;   
	var cookie_pos = allcookies.indexOf(cookie_name);   
	  
	// 若是找到了索引,就表明cookie存在,   
	// 反之,就說明不存在。   
	if (cookie_pos != -1)   
	{   
		// 把cookie_pos放在值的開始,只要給值加1便可。   
		cookie_pos += cookie_name.length + 1;   
		var cookie_end = allcookies.indexOf(";", cookie_pos);   
		  
		if (cookie_end == -1)   
		{   
			cookie_end = allcookies.length;   
		}   
		  
		var value = unescape(allcookies.substring(cookie_pos, cookie_end));   
	}   
	  
	return value;   
}   
  
// 調用函數   
var cookie_val = getCookie("username");


3.爲何我設置了cookie的過時時間若是爲關閉的時候就自動清空的話怎麼沒用呢?
來研究一下JSP操縱cookie?
Cookie概念:
    Cookie的格式其實是一段純文本信息, 由服務器隨着網頁一塊兒發送到客戶端, 並保存在客戶端硬盤中指定的目錄的. 你們都傳說Cookie會形成嚴重的安全威脅什麼的, 其實不是這麼回事情. 服務器讀取Cookie的時候, 只可以讀取到這個服務器相關的信息. 並且, 瀏覽器通常只容許存放300個Cookie, 每一個站點最多存放20個, 並且, 每一個Cookie的大小如今在4K, 根本不會佔用多少空間. 而且, Cookie是有時效性質的. 例如, 設置了Cookie的存活時間爲1分鐘, 則一分鐘後這個Cookie就會被瀏覽器刪除

Cookie版本:
    目前有兩個版本:
    版本0 : 由Netscape公司制定的,也被幾乎全部的瀏覽器支持. Java中爲了保持兼容性, 目前只支持到版本0, Cookie的內容中不能空格,方括號,圓括號,等於號(=),逗號,雙引號,斜槓,問號, @符號 ,冒號,分號。
    版本1 : 根據RFC 2109文檔制定的. 放寬了不少限制. 上面所限制的字符均可以使用. 但爲了保持兼容性, 應該儘可能避免使用這些特殊字符.

JSP中對Cookie的操做: 類型 方法名 方法解釋 
String getComment() 返回cookie中註釋,若是沒有註釋的話將返回空值. 
String getDomain() 返回cookie中Cookie適用的域名. 使用getDomain() 方法能夠指示瀏覽器把Cookie返回給同 一域內的其餘服務器,而一般 Cookie只返回給與發送它的服務器名字徹底相同的服務器。注意域名必須以點開始 
int getMaxAge() 返回Cookie過時以前的最大時間,以秒計算。 
String getName() 返回Cookie的名字 
String getPath() 返回Cookie適用的路徑。若是不指定路徑,Cookie將返回給當前頁面所在目錄及其子目錄下 的全部頁面。 
boolean getSecure() 若是瀏覽器經過安全協議發送cookies將返回true值,若是瀏覽器使用標準協議則返回false值。 
String getValue() 返回Cookie的值。筆者也將在後面詳細介紹getValue/setValue。 
int getVersion() 返回Cookie所聽從的協議版本。 
void setComment(String purpose) 設置cookie中註釋 
void setDomain(String pattern) 設置cookie中Cookie適用的域名  
void setMaxAge(int expiry) 以秒計算,設置Cookie過時時間。 
void setPath(String uri) 指定Cookie適用的路徑。 
void setSecure(boolean flag) 指出瀏覽器使用的安全協議,例如HTTPS或SSL。 
void setValue(String newValue) cookie建立後設置一個新的值。 
void setVersion(int v) 設置Cookie所聽從的協議版本 

一個簡單的例子
1. 寫入Cookie --- writecookie.jsp
-------------------------------------------------------------
<%@ page contentType="text/html; charset=ISO8859_1" %>
<%
  Cookie _cookie=new Cookie("user_delfancom", "delfan");
  _cookie.setMaxAge(30*60); // 設置Cookie的存活時間爲30分鐘
  response.addCookie(_cookie); // 寫入客戶端硬盤
  out.print("寫Cookie完成");
%>

2. 讀取Cookie.jsp --- readcookie.jsp
-------------------------------------------------------------

<%
  Cookie cookies[]=request.getCookies(); // 將適用目錄下全部Cookie讀入並存入cookies數組中
  Cookie sCookie=null; 
  String sname=null;
  String name=null;
  if(cookies==null) // 若是沒有任何cookie
    out.print("none any cookie");
  else
  {
    out.print(cookies.length + "<br>");
    for(int i=0;i<cookies.length; i++) // 循環列出全部可用的Cookie
    {
      sCookie=cookies[i];
      sname=sCookie.getName();
      name = sCookie.getValue();
      out.println(sname + "->" + name + "<br>");
    }
  } 
%>
須要注意的兩個問題: 1. Cookie有個適用路徑的問題, 就是說若是 writecookie.jsp和readcookie.jsp要放在贊成目錄下, 若是不在同一目錄下, 則寫的時候須要設置路徑,爲readcookie.jsp所在的路徑. 2. 讀入Cookie數組的時候須要判斷是否爲空(null), 網上不少代碼都沒有寫出這一點. 
相關文章
相關標籤/搜索