JavaScript操作Cookies
當(dāng)前位置:點(diǎn)晴教程→知識(shí)管理交流
→『 技術(shù)文檔交流 』
一直都是簡(jiǎn)單去js實(shí)現(xiàn)cookie的一些操作,今天把js對(duì)cookie操作系統(tǒng)的整理了一遍,包括:js讀取cookie,js添加cookie,js刪除cookie,示例如下: <!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處理函數(shù)練習(xí)(為我所寫,非我所想:改善面向?qū)ο?</title> <script language="JavaScript" type="text/javascript"> function addCookie(objName,objValue,objHours){//添加cookie var str = objName + "=" + escape(objValue); if(objHours > 0){//為0時(shí)不設(shè)定過期時(shí)間,瀏覽器關(guān)閉時(shí)cookie自動(dòng)消失 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,可以將其過期時(shí)間設(shè)定為一個(gè)過去的時(shí)間 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("刪除成功"); } </script> //添加cookie [下面講的經(jīng)個(gè)人覺得比較好哦!] 我們當(dāng)然還得介紹cookie的四個(gè)屬性。這些屬性用下面的格式加到字符串值后面: name=<value>[; expires=<date>][; domain=<domain>][; path=<path>][; secure] 名稱=<值>[; expires=<日期>][; domain=<域>][; path=<路徑>][; 安全] <value>, <date>, <domain> 和 <path> 應(yīng)當(dāng)用對(duì)應(yīng)的值替換。<date> 應(yīng)當(dāng)使用GMT格式,可以使用Javascript腳本語言的日期類Date的.toGMTString() 方法得到這一GMT格式的日期值。方括號(hào)代表這項(xiàng)是可選的。比如在 [; secure]兩邊的方括號(hào)代表要想把cookie設(shè)置成安全的,就需要把"; secure" 加到cookie字符串值的后面。如果"; secure" 沒有加到cookie字符串后面,那么這個(gè)cookie就是不安全的。不要把尖括號(hào)<> 和方括號(hào)[] 加到cookie里(除非它們是某些值的內(nèi)容)。設(shè)置屬性時(shí),不限屬性,可以用任何順序設(shè)置。 下面是一個(gè)例子,在這個(gè)例子里,cookie "username" 被設(shè)置成在15分鐘之后過期,可以被服務(wù)器上的所有目錄訪問,可以被"mydomain.com"域里的所有服務(wù)器訪問,安全狀態(tài)為安全。 // Date() 的構(gòu)造器設(shè)置以毫秒為單位 // .getTime() 方法返回時(shí)間,單位為毫秒 // 所以要設(shè)置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"; // 我們定義一個(gè)函數(shù),用來讀取特定的cookie值。[得到指定名字的cookie對(duì)象哦!] 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; } // 調(diào)用函數(shù) var cookie_val = getCookie("username"); 3.為什么我設(shè)置了cookie的過期時(shí)間如果為關(guān)閉的時(shí)候就自動(dòng)清空的話怎么沒用呢? 來研究一下JSP操縱cookie? Cookie概念: Cookie的格式實(shí)際上是一段純文本信息, 由服務(wù)器隨著網(wǎng)頁一起發(fā)送到客戶端, 并保存在客戶端硬盤中指定的目錄的. 大家都傳說Cookie會(huì)造成嚴(yán)重的安全威脅什么的, 其實(shí)不是這么回事情. 服務(wù)器讀取Cookie的時(shí)候, 只能夠讀取到這個(gè)服務(wù)器相關(guān)的信息. 而且, 瀏覽器一般只允許存放300個(gè)Cookie, 每個(gè)站點(diǎn)最多存放20個(gè), 而且, 每個(gè)Cookie的大小現(xiàn)在在4K, 根本不會(huì)占用多少空間. 并且, Cookie是有時(shí)效性質(zhì)的. 例如, 設(shè)置了Cookie的存活時(shí)間為1分鐘, 則一分鐘后這個(gè)Cookie就會(huì)被瀏覽器刪除 Cookie版本: 目前有兩個(gè)版本: 版本0 : 由Netscape公司制定的,也被幾乎所有的瀏覽器支持. Java中為了保持兼容性, 目前只支持到版本0, Cookie的內(nèi)容中不能空格,方括號(hào),圓括號(hào),等于號(hào)(=),逗號(hào),雙引號(hào),斜杠,問號(hào),@符號(hào),冒號(hào),分號(hào)。 版本1 : 根據(jù)RFC 2109文檔制定的. 放寬了很多限制. 上面所限制的字符都可以使用. 但為了保持兼容性, 應(yīng)該盡量避免使用這些特殊字符. JSP中對(duì)Cookie的操作: 類型 方法名 方法解釋 String getComment() 返回cookie中注釋,如果沒有注釋的話將返回空值. String getDomain() 返回cookie中Cookie適用的域名. 使用getDomain() 方法可以指示瀏覽器把Cookie返回給同 一域內(nèi)的其他服務(wù)器,而通常 Cookie只返回給與發(fā)送它的服務(wù)器名字完全相同的服務(wù)器。注意域名必須以點(diǎn)開始 int getMaxAge() 返回Cookie過期之前的最大時(shí)間,以秒計(jì)算。 String getName() 返回Cookie的名字 String getPath() 返回Cookie適用的路徑。如果不指定路徑,Cookie將返回給當(dāng)前頁面所在目錄及其子目錄下 的所有頁面。 boolean getSecure() 如果瀏覽器通過安全協(xié)議發(fā)送cookies將返回true值,如果瀏覽器使用標(biāo)準(zhǔn)協(xié)議則返回false值。 String getValue() 返回Cookie的值。筆者也將在后面詳細(xì)介紹getValue/setValue。 int getVersion() 返回Cookie所遵從的協(xié)議版本。 void setComment(String purpose) 設(shè)置cookie中注釋 void setDomain(String pattern) 設(shè)置cookie中Cookie適用的域名 void setMaxAge(int expiry) 以秒計(jì)算,設(shè)置Cookie過期時(shí)間。 void setPath(String uri) 指定Cookie適用的路徑。 void setSecure(boolean flag) 指出瀏覽器使用的安全協(xié)議,例如HTTPS或SSL。 void setValue(String newValue) cookie創(chuàng)建后設(shè)置一個(gè)新的值。 void setVersion(int v) 設(shè)置Cookie所遵從的協(xié)議版本 一個(gè)簡(jiǎn)單的例子 1. 寫入Cookie --- writecookie.jsp ------------------------------------------------------------- <%@ page contentType="text/html; charset=ISO8859_1" %> <% Cookie _cookie=new Cookie("user_delfancom", "delfan"); _cookie.setMaxAge(30*60); // 設(shè)置Cookie的存活時(shí)間為30分鐘 response.addCookie(_cookie); // 寫入客戶端硬盤 out.print("寫Cookie完成"); %> 2. 讀取Cookie.jsp --- readcookie.jsp ------------------------------------------------------------- <% Cookie cookies[]=request.getCookies(); // 將適用目錄下所有Cookie讀入并存入cookies數(shù)組中 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++) // 循環(huán)列出所有可用的Cookie { sCookie=cookies[i]; sname=sCookie.getName(); name = sCookie.getValue(); out.println(sname + "->" + name + "<br>"); } } %> 需要注意的兩個(gè)問題: 1. Cookie有個(gè)適用路徑的問題, 就是說如果 writecookie.jsp和readcookie.jsp要放在同意目錄下, 如果不在同一目錄下, 則寫的時(shí)候需要設(shè)置路徑,為readcookie.jsp所在的路徑. 2. 讀入Cookie數(shù)組的時(shí)候需要判斷是否為空(null), 網(wǎng)上很多代碼都沒有寫出這一點(diǎn). JS操縱Cookie? function getCookie( name ) { var start = document.cookie.indexOf( name + "=" ); var len = start + name.length + 1; if ( ( !start ) && ( name != document.cookie.substring( 0, name.length ) ) ) { return null; } if ( start == -1 ) return null; var end = document.cookie.indexOf( ';', len ); if ( end == -1 ) end = document.cookie.length; return unescape( document.cookie.substring( len, end ) ); } function setCookie( name, value, expires, path, domain, secure ) { var today = new Date(); today.setTime( today.getTime() ); if ( expires ) { expires = expires * 1000 * 60 * 60 * 24; } var expires_date = new Date( today.getTime() + (expires) ); document.cookie = name+'='+escape( value ) + ( ( expires ) ? ';expires='+expires_date.toGMTString() : '' ) + //expires.toGMTString() ( ( path ) ? ';path=' + path : '' ) + ( ( domain ) ? ';domain=' + domain : '' ) + ( ( secure ) ? ';secure' : '' ); } function deleteCookie( name, path, domain ) { if ( getCookie( name ) ) document.cookie = name + '=' + ( ( path ) ? ';path=' + path : '') + ( ( domain ) ? ';domain=' + domain : '' ) + ';expires=Thu, 01-Jan-1970 00:00:01 GMT'; } [看看下面的JS控制時(shí)間的東西超級(jí)強(qiáng)悍!]
該文章在 2010/8/18 21:30:49 編輯過 |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |