Cookie
什么是Cookie?
首先了解什么是会话:
- 用户打开浏览器,访问许多的web资源,直至关闭浏览器,这个过程称为会话
- 服务端给客户端一个标志,客户端下次再访问服务端,带上这个标志就可以了(cookie)
- 服务端登记客户端已经来过,下次来的时候匹配(session)
- cookie是面向客户端的
- session是面向服务端的
cookie常用方法:
Cookie[] cookies = req.getCookies();//从请求中得到cookie
cookie.getName() //cookie也是键值对存储的
cookie.getValue() //得到cookie的值
Cookie cookie=new Cookie("lastLoginTime",System.currentTimeMillis()+"");//新建一个cookie
cookie.setMaxAge(24*60*60); //设置cookie的有效期
resp.addCookie(cookie); //响应给客户一个cookie(放在客户端)
Demo:
package com.liu.servlet;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
//保存用户上一次来的时间
public class CookieDemo01 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html");
resp.setCharacterEncoding("UTF-8");
req.setCharacterEncoding("UTF-8");
PrintWriter out = resp.getWriter();
Cookie[] cookies = req.getCookies();
//
if(cookies != null){
out.write("你上一次访问的时间是");
for (int i = 0; i < cookies.length; i++) {
Cookie cookie = cookies[i];
//获取cookie的名字
if(cookie.getName().equals("lastLoginTime")){
long lastLoginTime = Long.parseLong(cookie.getValue());
Date date = new Date(lastLoginTime);
out.write(date.toLocaleString());
}
}
}else {
System.out.println("这是你第一次访问该网站");
}
Cookie cookie=new Cookie("lastLoginTime",System.currentTimeMillis()+"");
cookie.setMaxAge(24*60*60);
resp.addCookie(cookie);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
}
}
- cookie一般会保存在本地用户目录的appdata下
- 一个cookie只能保存一个信息
- 一个web站点可以给浏览器发送多个cookie,站点最多存放20个
- 浏览器cookie上限300个
- cookie有大小限制4kb
删除cookie:
- 不设置有效期,关闭浏览器,自动是失效
- 设置有效期为0