cookie和session都是会话跟踪技术,cookie一般储存客户端,session储存在服务器端(但sessionId储存在客户端),session的实现依赖于cookie,cookie存储不安全,session安全(用来储存重要信息),session储存占用服务器资源,一个cooike最多只能保存4k数据,大多数浏览器最多保存20个cookie。
因为cookie可以在浏览器禁用,所以可以用cookie加数据库的方式,如果cookie被禁用,可以用数据库获取值。
一.设置cookie
(1)创建一个Cookie对象:为字符串
Cookie cookie = new Cookie("key","value");
请务必牢记,名称和值中都不能包含空格或者如下的字符: [ ] ( ) = , " / ? @ : ;
(2) 设置有效期:调用setMaxAge()函数表明cookie在多长时间(以秒为单位)内有效。下面的操作将有效期设为了24小时。
cookie.setMaxAge(60*60*24);
(3) 将cookie发送至HTTP响应头中:调用response.addCookie()函数来向HTTP响应头中添加cookie。
response.addCookie(cookie);
eg:
String str = URLEncoder.encode(request.getParameter("name"),"utf-8"); //从页面获取值
// 设置 name 的cookie
Cookie name = new Cookie("name",str);
// 设置cookie过期时间为24小时。
name.setMaxAge(60*60*24);
// 在响应头部添加cookie
response.addCookie( name );
二.在浏览器获取cookie
想要读取cookie,需要调用request.getCookies()方法来获得一个javax.servlet.http.Cookie对象的数组,然后遍历这个数组,使用getName()方法和getValue()方法来获取每一个cookie的名称和值。
Cookie cookie = null;
Cookie[] cookies = null;
// 获取cookies的数据,是一个数组
cookies = request.getCookies();
if( cookies != null ){
for (int i = 0; i < cookies.length; i++){
cookie = cookies[i];
out.print("参数名 : " + cookie.getName());
out.print("<br>");
out.print("参数值: " + URLDecoder.decode(cookie.getValue(), "utf-8") +" <br>");
}
}
三.删除cookie
获取一个已经存在的cookie然后存储在Cookie对象中。
将cookie的有效期设置为0。
将这个cookie重新添加进响应头中。
Cookie cookie = null;
Cookie[] cookies = null;
// 获取当前域名下的cookies,是一个数组
cookies = request.getCookies();
if( cookies != null ){
for (int i = 0; i < cookies.length; i++){
cookie = cookies[i];
if((cookie.getName( )).compareTo("name") == 0 ){
cookie.setMaxAge(0);
response.addCookie(cookie);
out.print("删除 Cookie: " + cookie.getName( ) + "<br/>");
}
out.print("参数名 : " + cookie.getName());
out.print("<br>");
out.print("参数值: " + URLDecoder.decode(cookie.getValue(), "utf-8") +" <br>");
}
}