Cookie详解
cookie相当于服务端给客户端的一个令牌,当下次访问时,依照这个令牌,服务端就知道曾经来过
(比如很多登陆过的网站一定时间内不需要重复登陆)
编写代码
CookieDemo01
package com.hao.cookie;
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 doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
resp.setCharacterEncoding("utf-8");
resp.setContentType("text/html");
PrintWriter out = resp.getWriter();
//得到所有cookie
Cookie[] cookies = req.getCookies();
if(cookies == null){
out.print("这是您第一次访问本站");
}else{
out.print("您上次进入本站的时间是:");
//遍历所有cookie,找到想要的标识符为lastLoginTime的cookie
for (int i = 0; i < cookies.length; i++) {
Cookie cookie = cookies[i];
if(cookie.getName().equals("lastLoginTime")){
Long l = new Long(cookie.getValue());
Date date = new Date(l);
//输出该cookie创建时间
out.print(date);
}
}
}
//添加一个cookie(每次访问都会添加一个cookie)
Cookie cookie = new Cookie("lastLoginTime",System.currentTimeMillis()+"");
resp.addCookie(cookie);
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
}
编写映射
<servlet>
<servlet-name>CookieDemo01</servlet-name>
<servlet-class>com.hao.cookie.CookieDemo01</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>CookieDemo01</servlet-name>
<url-pattern>/cookie1</url-pattern>
</servlet-mapping>
测试访问
第一次访问
按F5刷新后
为什么cookie一开始不为空 :
默认存在2个cookie
小知识
- 一个Cookie只能保存一个信息;
- 一个Web站点可以给浏览器发送多个Cookie,最多存放20个Cookie;
- Cookie有大小限制(4kb)
- 浏览器上限为300个Cookie
如何删除cookie
- 不设置有效期,关闭浏览器自动删除(cookie失效)
- 设置有效时间为0(setMaxAge方法)