|
JavaScript中设置客户端“小甜饼” |
|
客户端Cookies可以斑竹我们检测用户状态,例如用户是否经过了一些特殊页面(例如:登陆页面)才来到当前页面,或者用户曾经进行过那些操作。所以:在购物车中应用非常广泛。比如,用户在不同的地方购买了各种商品,每购买一个商品就可以暂时将该商品存储在Cookie中,当购买行为结束后到结帐处付款结帐。
实际上,Cookies是保存在客户端(用户本地机器)上的文本文件,大小最大为4K,每个SERVER Domain上只能有300个Cookies。为什么要使用Cookie呢?应为HTTP请求是一种无序的请求,也就是说,当客户端向服务器发出一个HTTP请求(request)后(比如一个数据库查询请求等),服务器发生响应(response)将一个静态的页面“吐”给用户的浏览器,这样用户就可以看到一些东西了。但是,一旦这个过程结束服务器就什么也不知道了。客户端只有再次发出请求,服务器再次响应,这一次的响应是独立的与刚刚进行的“请求-响应”没有关系,仿佛服务器没有什么记忆能力。但是我们的应用要求SERVER要有记忆能力,用户刚刚买了什么商品,数量是多少?所以应该有一种机制,使SERVER能够记忆,其中“Cookie”就是这个机制的一种,应该明白“Cookie”是客户端机制。相应的Server端机制在ASP中用Session解决用户状态的跟踪问题。 虽然,Cookie有这些好用,但是滥用也是很有害处的,恶意程序可以通过Cookie取得用户的隐秘资料,泄露隐私权。这不在我们讨论的范围内。需要注意的是:不要将用户的帐号和密码写在Cookie里,因为Cookie使文本文件,使明文的,任何接触到计算机的人都可以看到它的内容。尤其是在“网吧”等公共场所,使用完不要忘记清除cache中的cookies。 本例讨论如何设置客户端Cookies 需要用到的几个函数: 函数一、写cookie的函数,将Cookie写入客户端,通用函数,传入3个参数即可(Cookie名字,值和失效期) //函数:写入cookie function WriteCookie (cookieName, cookieValue, expiry) { var expDate = new Date(); if(expiry) //如果设置了cookie失效时间; { expDate.setTime (expDate.getTime() + expiry); document.cookie = cookieName + "=" + escape (cookieValue) + "; expires=" + expDate.toGMTString(); } else //没有设置cookie失效时间; { document.cookie = cookieName + "=" + escape (cookieValue); } } 函数二、取得表单数据 //函数:取得form表单域的值作为cookie的相关值(cookie name,cookie value,expires) function setCookie () { var name = document.myform.text1.value; var value = document.myform.text2.value; var num = document.myform.text3.value; var select = document.myform.text3.selectedIndex; if (name=="" || value=="" || num==""){ alert ("请输入Cookie的名字,值和失效期再测试!"); return false; } if(num == 0) { WriteCookie(name, value, 0); } else if(select == 0) //如果选择的是天;时间换算成秒; { WriteCookie(name, value, 1000 * 60 * 60 * 24 * num); } else if(select == 1) //如果选择的是月; { WriteCookie(name, value, 1000 * 60 * 60 * 24 * num * 31); } else if(select == 2) //如果选择的是年; { WriteCookie(name, value, 1000 * 60 * 60 * 24 * num * 365); } alert ("Cookie已经保存,欢迎访问Final Java2000!") } 函数三、读cookie的值 function ReadCookie (CookieName) { var CookieString = document.cookie; var CookieSet = CookieString.split (';'); var SetSize = CookieSet.length; var CookiePieces var ReturnValue = ""; var x = 0; for (x = 0; ((x < SetSize) && (ReturnValue == "")); x++) { CookiePieces = CookieSet[x].split ('='); if (CookiePieces[0].substring (0,1) == ' ') { CookiePieces[0] = CookiePieces[0].substring (1, CookiePieces[0].length); } if (CookiePieces[0] == CookieName) { ReturnValue = CookiePieces[1]; } } alert ("Cookie Value is:"+ReturnValue); } HTML表单内容: <form name=myform> <table width="95%" border="0" cellspacing="0" cellpadding="2"> <tr> <td>Cookie name:</td> <td> <input type=text name="text1" value="java2000" readonly> </td> </tr> <tr> <td>Cookie value:</td> <td> <input type=text name="text2" value="welcome" readonly> </td> </tr> <tr> <td>Cookie保留期:</td> <td> <input type=text value=0 name="text3"> <select name="Choice"> <option value="0" selected>天</option> <option value="1">月</option> <option value="2">年</option> </select> </td> </tr> <tr> <td colspan="2"> <input type=button value="保存Cookie" onClick="setCookie()" name="button2"> <input type=button value="删除Cookie" onClick="WriteCookie(document.myform.text1.value, '');alert('Cookies已经清除了!')" name="button"> <input type="submit" name="Submit" value="看Cookie内容" onClick="ReadCookie (document.myform.text1.value)"> </td> </tr> </table> </form> 说明:具体使用时可能需要你稍微修改一下以适合自己的应用,但是主要代码已经在这里了。 |