Cookie的实现原理
浏览器将设置的cookie发送到客户端response.add(cookie)
客户端通过request.getCookie拿到cookie数组
将设置的cookie信息通过响应头set-cookie发送到客户端
客户端下一次请求将会带着请求头cookie去服务器中访问,实现数据共享
cookie的注意点
1.服务器一次可以发送多个cookie
2.默认情况下,cookie保存在浏览器内存中,将浏览器关闭后.cookie销毁,也可以通过setMaxAge(秒) 正数:持久化存储 负数:默认值,浏 览器关闭销毁,0:删除cookie信息 ;
cookie特点
- cookie存储数据在客户端
- 浏览器对个的cookie大小有限制,以及在同一个域名下的cookie大小也有限制
Cookie记住上一次访问时间
@WebServlet("/LastTime")
public class LastTime extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Cookie[] cookies = request.getCookies();
boolean flag = false;
response.setContentType("text/html;charset=utf-8");
if (cookies!=null&&cookies.length>0){
for (Cookie cookie : cookies) {
String name = cookie.getName();
if ("lastTime".equals(name)){
//不是第一次访问
flag=true;
String value = cookie.getValue();
response.getWriter().write("欢迎回来,你上次的访问时间为"+value);
Date date = new Date();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日HH:mm:ss");
String format = simpleDateFormat.format(date);
cookie.setValue(format);
cookie.setMaxAge(60*60);
response.addCookie(cookie);
break;
}
}
}
if (cookies.length==0||cookies==null||flag==false){
Date date = new Date();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日HH:mm:ss");
String format = simpleDateFormat.format(date);
Cookie c = new Cookie("lastTime", format);
c.setMaxAge(60*60);
response.addCookie(c);
response.getWriter().write("你好这是你首次访问");
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}
session
服务器端会话技术,在一次会话的多次请求间共享数据