本以为Cookie读写有多复杂,今天一研究原来so easy,无论是JavaScript中,还是JSP中,读写Cookie的代码都很固定,以下代码就是这些函数。
(一)浏览器存储路径
1.IE 存放路径:
C:\Documents and Settings\ 你的用户名 \Cookies 文件夹
注:每个 cookie 是一个 txt 文件,文件名是以 “ 用户名 @ 网站 URL” 命名的
缓存路径:
C:\Documents and Settings\ce\Local Settings\Temporary Internet Files
2.FireFox 存放路径:
C:\Documents and Settings\用户名\Application Data\Mozilla\Firefox\Profiles\随机目录,在目录下可以看到一个cookie.sqlite文件(firefox3.X版 本),所有的cookie都是保存在这个文件中。
(二)JavaScript 操纵 cookie 函数
function setCookie(sName, sValue, oExpires, sPath, sDomain, bSecure) { var sCookie = sName + "=" + encodeURIComponent(sValue); if (oExpires) { sCookie += "; expires=" + oExpires.toGMTString(); } if (sPath) { sCookie += "; path=" + sPath; } if (sDomain) { sCookie += "; domain=" + sDomain; } if (bSecure) { sCookie += "; secure"; } document.cookie = sCookie; } function getCookie(sName) { var sRE = "(?:; )?" + sName + "=([^;]*);?"; var oRE = new RegExp(sRE); if (oRE.test(document.cookie)) { return decodeURIComponent(RegExp["$1"]); } else { return null; } } function deleteCookie(sName, sPath, sDomain) { var sCookie = sName + "=; expires=" + (new Date(0)).toGMTString(); if (sPath) { sCookie += "; path=" + sPath; } if (sDomain) { sCookie += "; domain=" + sDomain; } document.cookie = sCookie; }
例子:
setCookie("name", "Nicholas",new Date(2010,8,16),"/JavaScriptDemo");
(三) JSP 操纵 cookie 函数
<%!
//读取Cookie
public static Cookie getCookie(HttpServletRequest request,String name){
Cookie[] cookies = request.getCookies();
if(cookies != null){
for(int i=0;i<cookies.length;i++){
if(cookies[i].getName().equals(name)){
return cookies[i];
}
}
}
return null;
}
%>
<%
Cookie cookie = getCookie(request,"name");
out.write(URLDecoder.decode(cookie.getValue(), "utf-8")); //解码
%>
<%
Cookie nameCookie = new Cookie("name",URLEncoder.encode("中文字符","utf-8"));
nameCookie.setMaxAge(2000);//指定cookie的最大寿命,单位秒。
nameCookie.setDomain(".mysite1.com");//一般不需要设置,除非需要跨域读取cookie值
nameCookie.setPath("/");
response.addCookie(nameCookie);
%>
<%
//清空cookie
Cookie domain = new Cookie("name","");
domain.setDomain(".mysite1.com" );//需要跟客户端Cookie文件中的域名一致
domain.setMaxAge(0);//重点设置cookie过期时间为0秒
domain.setPath("/");;
response.addCookie( domain );
%>
总结:
1. 解决cookie读取乱码问题
//JSP中解决乱码问题
URLEncoder.encode(userinfo,"utf-8") //编码
URLDecoder.decode(cookie.getValue(),"utf-8") //解码
//JavaScript中解决乱码问题
encodeURIComponent(sValue); //编码
decodeURIComponent(sValue); //解码