1、什么是 Cookie?
Cookie 是一些数据, 存储于你电脑上的文本文件中。
当 web 服务器向浏览器发送 web 页面时,在连接关闭后,服务端不会记录用户的信息。
Cookie 的作用就是用于解决 "如何记录客户端的用户信息":
当用户访问 web 页面时,他的名字可以记录在 cookie 中。
在用户下一次访问该页面时,可以在 cookie 中读取用户访问记录。
Cookie 以名/值对形式存储,如: username=John Doe
2、使用Cookie对数据进行存取
存数据
//创建COOKie
Cookie cookie =new Cookie("username","jd1208");
Cookie cookie2 =new Cookie("passwod","12346");
//向浏览器发送cookie信息
response.addCookie(cookie);
response.addCookie(cookie2);
取数据
//获取cookie
Cookie[]cookies = request.getCookies();
//遍历cookie
for (Cookie c :cookies) {
String name =c.getName(); //获取name
String value =c.getValue();//获取value
}
3、cookie里面存中文
Tomcat8以下版本不支持,会出现中文乱码。以上版本支持
如何解决?需要转码。
//处理中文
String name ="张三";
name =URLEncoder.encode(name,"utf-8");
//存
Cookie c =new Cookie("name",name);
//取
Cookie[]cookies = request.getCookies();
for (Cookie cookie1 :cookies) {
String value =URLEncoder.encode(cookie1.getValue(),"utf-8");
}
4、cookie的携带路径
为cookie产生路径
设置cookie有效访问路径,先设置访问路径再添加cookie进response
Cookie cookie =new Cookie("jd_user","jd12090909");
cookie.setPath(request.getContextPath());
response.addCookie(cookie);
5、cookie的生存时间
默认是当前会话,浏览器关闭,会话结束,cookie失效。
cookie.setMaxAge(60*5);//单位是秒
记录访问时间
* 需求:用户首次访问,显示欢迎语。之后访问,显示上次访问时间。
* 实现:首次访问,获取cookie的对象,如果为空,就是首次访问。此时将这次访问时间存入当前cookie中
* 之后,先获取cookie中的数据,再进行覆盖
response.setContentType("text/html;charset=UTF-8");//处理页面中文乱码
Cookie[]cookies = request.getCookies();
String time =null;//存放访问时间
if(cookies !=null){
//从cookie中取出上次访问的时间
for (Cookie cookie :cookies) {
String name =cookie.getName();
if("time".equals(name)){
//证明找到了名字为time的cookie
time =cookie.getValue();
Cookie cookie1 =new Cookie(name,MyData.format());
cookie.setPath(request.getContextPath());//访问范围为当前web项目
cookie.setMaxAge(60*10);//10分钟内不过期
response.addCookie(cookie1);//将cookie存入response
}
}
if(time!=null){
//证明在cookie中取到了名字为time的cookie
response.getWriter().write("上次访问时间为:"+time);
}else{
response.getWriter().write(" error :cookie不为空,但是取不到time值 ");
}
}else{
//首次访问
//获取当前的时间
time =MyData.format();
//将当前时间存入cookie
Cookie cookie =new Cookie("time",time);
cookie.setPath(request.getContextPath());//访问范围为当前web项目
cookie.setMaxAge(60*10);//10分钟内不过期
response.addCookie(cookie);//将cookie存入response
//打印“新用户:xxxx,欢迎您”
response.getWriter().write("新用户:xxxx,欢迎您");
}
6、清空cookie
使用覆盖的方式:保证同名键(cookie的name相同),保证相同路径,设置过期时间为0
清空name=jd_user的cookie
//设置一个cookie
Cookie cookie =new Cookie("jd_user","jd12090909");
//设置cookie有效访问路径
cookie.setPath(request.getContextPath());
//设置一个同名Cookie
Cookie cookie1 =new Cookie("jd_user","jd12090909");
//设置相同的访问路径
cookie1.setPath(request.getContextPath());
//设置过期时间
cookie1.setMaxAge(0);
7、记录用户登录用户名与密码
protected void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException {
response.setContentType("text/html;charset=UTF-8");
//获取username,password
String username =request.getParameter("username");
String password =request.getParameter("password");
String[]rember = request.getParameterValues("rember");
//判断用户名,密码是否正确
if("zhangsan".equals(username)&&"123".equals(password)){
response.getWriter().write("登录成功");
}else{
response.getWriter().write("登录失败");
}
if(rember ==null){
System.out.println("rember为空");
//提交的时候,不勾选
//不点击记住我,清空cookie信息
Cookie[]cookies = request.getCookies();
for (Cookie cookie :cookies) {
String name =cookie.getName();
if(name.equals("tt_username")||name.equals("tt_password")){
cookie.setValue("");
cookie.setMaxAge(0);
response.addCookie(cookie);
}
}
}else{
//不为空,说明用户点击了记住我
//1、向cookie存入用户名
Cookie cookie =new Cookie("tt_username",username);
Cookie cookie_pass =new Cookie("tt_password",password);
//2.设置用户 的访问范围
cookie.setPath(request.getContextPath());
cookie_pass.setPath(request.getContextPath());
//3.设置用户cookie的过期时间
cookie.setMaxAge(60*10);
cookie_pass.setMaxAge(60*10);
response.addCookie(cookie);
response.addCookie(cookie_pass);
}
doGet(request, response);
}