日期:2014-05-16 浏览次数:20513 次
最近项目用到了自动登录功能,使用到了cookie。
一、cookie简介??? 浏览器与WEB服务器之间是使用HTTP协议进行通信的;而HTTP协议是无状态协议。也就是说,当某个用户发出页面请求时,WEB服务器只是简单的进行响应,然后就关闭与该用户的连接。因此当一个请求发送到WEB服务器时,无论其是否是第一次来访,服务器都会把它当作第一次来对待,这样的不好之处可想而知。为了弥补这个缺陷,Netscape开发出了cookie这个有效的工具来保存某个用户的识别信息,???? 它是一种WEB服务器通过浏览器在访问者的硬盘上存储信息的手段。???? 它是服务器发送给浏览器的体积很小的纯文本信息。???? 定义:cookie是Web浏览器存储的少量命名数据,它与某个特定的网页和网站关联在一起。???? cookie实际上和某一网站和网页关联的,保存用户一定信息的文本文件。 
二、cookie的属性???? 除名字与值外,每个cookie有四个可选属性:???? 1.expires:指定cookie的生存期。默认情况下cookie是暂时的,浏览器关闭就失效。???? 2.path:它指定了与cookie关联在一起的网页。默认是在和当前网页同一目录的网页中有效。???????? 如果把path设置为"/",那么它对该网站的所有网页都可见了。???? 3.domain:设定cookie有效的域名,???????? 如果把path设置为"/",把domain设为".sohu.com",那么 A.sohu.com和B.sohu.com???????? 的所有网页都能够访问此cookie。???? 4.secure:布尔值,它指定了网络上如何传输cookie。默认情况下,cookie是不安全的,???????? 可以通过一个不安全的,普通的HTTP协议传输;若设置cookie为安全的,那么它将???????? 只在浏览器和服务器通过HTTPS或其它的安全协议连接在一起时才被传输。 
三、cookie的操作???? cookie可以用javascipt来操作,也可以用JSP来操作。???? 下面给大家我写的几个例子,相信大家一看就明白了:???? 1.javascript 操作:???? 
??? <script language="javascript"> 
??? //设置cookie,cookie有效期时间未GMT时间(距1970年1月1日临时的毫秒) 
??? //例如可以设置setCookie("password","12345",(3600000*24*180)),180有效 
??? function setCookie (name, value, expires) {? 
var expdate = new Date(); 
expdate.setTime(expdate.getTime() + expires); 
document.cookie = name + "=" + escape(value) + 
??????? "; expires=" + expires.toGMTString() +? "; path=/"; 
??? } 
???? 
??? //根据cookie名,取得cookie值 
??? function getCookie(name) {?? 
????? var search;? 
????? search = name + "=" 
????? offset = document.cookie.indexOf(search) 
????? if (offset != -1) { 
??????? offset += search.length ; 
??????? end = document.cookie.indexOf(";", offset) ; 
??????? if (end == -1) 
????????? end = document.cookie.length; 
??????? return unescape(document.cookie.substring(offset, end)); 
????? } 
????? else 
??????? return ""; 
??? } 
??? 
??? //删除某一cookie 
??? function deleteCookie(name) {??? 
????? var expdate = new Date(); 
????? expdate.setTime(expdate.getTime() - (3600 *24* 1000 * 1)); 
????? setCookie(name, "", expdate); 
??? } 
??? 
??? //检查是否存在此cookie 
??? function checkCookie(cookieName,cookieValue){ 
if (getCookie(cookieName)==cookieValue){ 
? return true; 
}else{ 
? return false; 
} 
??? } 
??? </script> 
??? 2.jsp 操作:???? java中有个Cookie类:javax.servlet.http.Cookie 
??? //读取cookie的通用类,以Cookie[] 做参数传个构造函数; 
??? package com.test; 
??? import javax.servlet.http.*; 
/** 
* @author sheng_li 
* 
*/ 
public class ComCookie { 
private Cookie[] cookies; 
private Cookie cookie; 
public ComCookie(Cookie[] cs){ 
? cookies = cs;? 
} 
/** 
? * 通过cookieName,取得cookieValue,如果没有此cookie则返回默认值 
? * @param cookieName 
? * @param defaultValue 
? * @return 
? */ 
public String getCookieValue(String cookieName,String defaultValue) { 
? for(int i=0; i< cookies.length; i++) { 
??? Cookie cookie = cookies[i]; 
??? if (cookieName.equals(cookie.getName())) 
?? return(cookie.getValue()); 
? } 
? return(defaultValue); 
} 
/** 
? * 类方法,通过cookieName,取得cookieValue 
? * @param cookies 
? * @param cookieName 
? * @param defaultValue 
? * @return 
? */ 
public static String getCookieValue(Cookie[] cookies, 
?????? String cookieName, 
?????? String defaultValue) { 
? for(int i=0; i < cookies.length; i++) { 
??? Cookie cookie = cookies[i]; 
??? if (cookieName.equals(cookie.getName())) 
?? return(cookie.getValue()); 
? } 
? return(defaultValue); 
} 
} 
JSP中:(以下内容来源于网络) 
JSP是使用如下的语法格式来创建cookie的:   Cookie cookie_name =new Cookie("Parameter","Value");   例如:Cookie newCookie =new Cookie("username","waynezheng"); response.addCookie(newCookie);   解释:JSP是调用Cookie对象相应的构造函数Cookie(name,value)用合适的名字和值来创建Cookie,然后 Cookie可以通过HttpServletResponse的addCookie方法加入到Set-Cookie应答头,本例中Cooki