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>
说明:具体使用时可能需要你稍微修改一下以适合自己的应用,但是主要代码已经在这里了。