一、Cookie简介
Cookie是客户端技术,程序把每个用户的数据以cookie的形式写给各自的浏览器,当用户使用浏览器再去访问服务器中的web资源时,就会带着各自的数据去。这样web资源处理的就是用户各自的数据了。
二、Java提供操作Cookie的API
- Cookie(String name,String value) 构造方法
- getName()获取Cookie的名称
- getValue()获取Cookie的值
- setValue(String value)设置Cookie的值
- setMaxAge(int expiry)设置Cookie的最大保存时间,即有效期
- getMaxAge()获取Cookie的有效期
- setPath(String uri)设置cookie的有效路径
- getPath()获取Cookie的有效路径
- setDomain(String pattern)设置Cookie的有效域
- getDomain()获取Cookie的有效域
三、Cookie范例
使用cookie记录用户上一次访问的时间
import java.io.IOException;goole浏览器保存Cookie信息
import java.io.PrintWriter;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class CookieDemo01 extends HttpServlet{
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setCharacterEncoding("utf-8");
response.setHeader("content-type", "text/html;charset=utf-8");
PrintWriter pw = response.getWriter();
//获取浏览器访问访问服务器时传递过来的cookie数组
Cookie[] cookies = request.getCookies();
//如果用户是第一次访问,那么得到的cookies将是null
if(cookies!=null){
pw.print("您上次访问的时间是:");
for(int i=0;i<cookies.length;i++){
Cookie cookie = cookies[i];
if(cookie.getName().equals("lastTime")){
Long l = Long.valueOf(cookie.getValue());
Date date = new Date(l);
pw.print(date.toString());
}
}
}else{
pw.print("第一次登录");
}
//用户访问过之后重新设置用户的访问时间,存储到cookie中,然后发送到客户端浏览器
Cookie cookie = new Cookie("lastTime",String.valueOf(System.currentTimeMillis()));
//将cookie对象添加到response对象中,这样服务器在输出response对象中的内容时就会把cookie也输出到客户端浏览器
response.addCookie(cookie);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doGet(request, response);
}
}
当浏览器关闭后,Cookie就失效了,如何保持Cookie不失效呢?可以设置Cookie的有效期。
//用户访问过之后重新设置用户的访问时间,存储到cookie中,然后发送到客户端浏览器
Cookie cookie = new Cookie("lastTime",String.valueOf(System.currentTimeMillis()));
//设置Cookie的有效期为1天
cookie.setMaxAge(24*60*60);</span>
//将cookie对象添加到response对象中,这样服务器在输出response对象中的内容时就会把cookie也输出到客户端浏览器
response.addCookie(cookie);
设置Cookie有效期后,Cookie将会存储在硬盘上。
注意:
- 一个Cookie只能标识一种信息,它至少含有一个标识该信息的名称(NAME)和设置值(VALUE)。
- 一个WEB站点可以给一个WEB浏览器发送多个Cookie,一个WEB浏览器也可以存储多个WEB站点提供的Cookie。
- 浏览器一般只允许存放300个Cookie,每个站点最多存放20个Cookie,每个Cookie的大小限制为4KB。
- 如果创建了一个cookie,并将他发送到浏览器,默认情况下它是一个会话级别的cookie(即存储在浏览器的内存中),用户退出浏览器之后即被删除。若希望浏览器将该cookie存储在磁盘上,则需要使用maxAge,并给出一个以秒为单位的时间。将最大时效设为0则是命令浏览器删除该cookie。
//创建一个名字为lastAccessTime的cookie
Cookie cookie = new Cookie("lastAccessTime", System.currentTimeMillis()+"");
//将cookie的有效期设置为0,命令浏览器删除该cookie
cookie.setMaxAge(0);
response.addCookie(cookie);
Cookie存储中文
//要想在Cookie中存储中文,必须先进行转码
Cookie cookie = new Cookie("username", URLEncoder.encode("韩信","utf-8"));
response.addCookie(cookie);
//要获取Cookie中的中文,必须先解码
URLEncoder.encode(String.valueOf(request.getCookies()[0]),"utf-8");