Cookie是保存在瀏覽器端的,因此瀏覽器具有操作Cookie的先決條件。瀏覽器可以使用腳本程序如JavaScript或者VBScript等操作Cookie。這里以JavaScript為例介紹常用的Cookie操作。例如下面的代碼會(huì)輸出本頁(yè)面所有的Cookie。
- <script>document.write(document.cookie);</script>
各Cookie之間用分號(hào)";"隔開,例如:"cookie1=A;cookie2=B"。JavaScript中并沒(méi)有專門處理Cookie的API,如果想單獨(dú)獲取某個(gè)Cookie值,只能手工寫代碼解析字符串。例如下面代碼中的setCookie()與getCookie()方法。
代碼5.7 javascript.jsp
- <%@ page language="java" pageEncoding="UTF-8"%>
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <html>
- <head>
- <script type="text/javascript">
- function getCookie(name){ // 返回名為name的Cookie
- var str = document.cookie; // 獲取Cookie字符串
- if(!str || str.indexOf(name + "=") < 0) // 尋找name=
- return;
- var cookies = str.split("; "); // 用;將所有的Cookie分隔開
- for(var i=0; i<cookies.length; i++){ // 遍歷每個(gè)Cookie
- var cookie = cookies[i]; // 當(dāng)前Cookie
- if(cookie.indexOf(name + "=") == 0){ // 如果名字為name
- var value = cookie.substring(name.length + 1);
- // 獲取value
- return decodeURI(value); // 將value解碼,并返回
- }
- }
- }
- function setCookie(name, value){ // 設(shè)置Cookie
- document.cookie = name + "=" + encodeURI(value);
- // 直接設(shè)置即可
- }
- </script>
- </head>
- <body>
- <div align="center" style="margin:10px; ">
- <fieldset>
- <legend>當(dāng)前有效的 Cookie</legend>
- <div id="cookieDiv"></div>
- <script type="text/javascript">
- cookieDiv.innerHTML = document.cookie;
- </script>
- </fieldset>
- <fieldset>
- <legend>歡迎您</legend>
- <table>
- <tr>
- <td>讀取 Cookie: </td>
- <td><input name="name1" /> <input class="button"
type="button" value="讀取" onclick="alert
- (getCookie(name1.value)); "></td>
- </tr>
- <tr>
- <td>設(shè)置 Cookie: </td>
- <td></td>
- </tr>
- <tr>
- <td align="right">Name 屬性: </td>
- <td><input name="name2" /></td>
- </tr>
- <tr>
- <td align="right">Value 屬性: </td>
- <td><input name="value2" /></td>
- </tr>
- <tr>
- <td> </td>
- <td><input type="button" value="設(shè)置" onclick=
- "setCookie(name2.value, value2.value); cookieDiv.
- innerHTML = document.cookie; " class="button"></td>
- </tr>
- </table>
- </fieldset>
- </div>
- </body>
- </html>
代碼使用純JavaScript代碼實(shí)現(xiàn)了讀寫Cookie。運(yùn)行效果如圖5.6所示。
上面的setCookie()是個(gè)簡(jiǎn)化了的方法,只能設(shè)置name與value屬性。如果要設(shè)置所有的Cookie屬性,可以使用下面的完全版本。
- function setCookie(name, value){ // 設(shè)置Cookie
- var expires = (arguments.length > 2) ? arguments[2] : null;
- // 判斷expires屬性
- var path = (arguments.length > 3) ? arguments[3] : null;
- // 判斷path屬性
- var domain = (arguments.length > 4) ? arguments[4] : null;
- // 判斷domain屬性
- var secure = (arguments.length > 5) ? arguments[5] : false;
- // 判斷secure屬性
- document.cookie = name + "=" + encodeURI(value) + // 設(shè)置Cookie屬性
- ((expires == null) ? "" : ("; expires=" + expires.toGMTString())) +
- ((path == null) ? "" : ("; path=" + path)) +
- ((domain == null) ? "" : ("; domain=" + domain)) +
- ((secure == true) ? "; secure" : "");
- }
由于JavaScript能夠任意地讀寫Cookie,有些好事者便想使用JavaScript程序去窺探用戶在其他網(wǎng)站的Cookie。不過(guò)這是徒勞的,W3C組織早就意識(shí)到JavaScript對(duì)Cookie的讀寫所帶來(lái)的安全隱患并加以防備了,W3C標(biāo)準(zhǔn)的瀏覽器會(huì)阻止JavaScript讀寫任何不屬于自己網(wǎng)站的Cookie。換句話說(shuō),A網(wǎng)站的JavaScript程序讀寫B(tài)網(wǎng)站的Cookie不會(huì)有任何結(jié)果。
該文章在 2010/9/2 13:59:24 編輯過(guò)