Cookie对象的使用
作者:互联网
-
Cookie对象是做什么的?
在我的理解里,Cookie是客户端用来和客户端保持通讯信息的一个对象。 -
怎样使用Cookie
使用一个对象,很显然我们要先创建他
Cookie cookie = new Cookie(name, value);
然后用res对象将Cookie发送给客户端
res.addCookie(cookie);
这样客户端下次访问服务器的时候,请求头中就会包含Cookie的信息,服务器就知道是哪个客户端在访问他了。我们在服务器中用req对象获取浏览器的Cookie
req.getCookies() -
Cookie需要注意的细节
- 一次可不可以发送多个Cookie
可以,可以创建多个Cookie对象,使用resp对象调用多次addCookie方法发送Cookie即可 - Cookie在浏览器中保存多长时间
- 默认情况下,浏览器关闭后,Cookie会被销毁
- 持久化存储:setMaxAge(int seconds)
- 正数:将Cookie数据写道硬盘的文件中。持久化存储(正数越大,时间越长)
- 负数:默认值
- 0:删除Cookie信息
- 一次可不可以发送多个Cookie
-
Cookie能不能存中文
在tomcat8之前Cookie之中不能存储中文,但是特殊字符还是不支持,建议使用URL编解码 -
Cookie共享问题
默认情况下Cookie不能共享
用于设置Cookie范围:setPath(String Path),设置Cookie的获取范围。默认情况下,会去设置当前的虚拟目录,如果要共享,将path设置为/
不同的tomcat服务器间Cookie共享问题
setDomain(String path):如果设置一级域名相同,那么多个服务器之间就能共享Cookie
例如: setDomain(".baidu.com"),那么tieba.baidu.com和news.baidu.com中的Cookie可以共享 -
Cookie的特点
- Cookie存储数据在客户端服务器
- 浏览器对于单个Cookie的大小有限制(4kb)以及对于同一个域名下的总Cookie数量也有限制(20个)
作用:
- 存储少量的不太敏感的数据
- 在不登录的情况下,完成服务器对客户端的识别
-
应用Cookie的案例
```java package cn.zzl.cookie; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; 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.net.URLDecoder; import java.net.URLEncoder; import java.text.SimpleDateFormat; import java.util.Date; @WebServlet("/demo4") public class Demo4 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { this.doPost(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //服务器告诉客户端本次响应体的数据格式以及编码格式 resp.setContentType("text/html;charset=utf8"); Cookie[] cookies = req.getCookies(); boolean flag = false; if (cookies != null && cookies.length > 0) { for (Cookie cookie : cookies) { String name = cookie.getName(); System.out.println(name); //如果浏览器不是第一次访问该服务器 if ("lastTime".equals(name)) { flag = true; PrintWriter writer = resp.getWriter(); //获取日期格式化对象 SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss"); Date date = new Date(); //格式化当前日期 String formatTime = simpleDateFormat.format(date); //由于tomcat8版本的Cookie并不支持特殊字符,所以使用u8编码 formatTime = URLEncoder.encode(formatTime, "utf-8"); //设置Cookie生命时间 cookie.setMaxAge(60 * 60 * 24 * 30); resp.addCookie(cookie); String value = cookie.getValue(); value = URLDecoder.decode(value, "utf-8"); writer.write("欢迎回来,上次访问的时间是:" + value); cookie.setValue(formatTime); break; } } } if (cookies == null || cookies.length == 0 || !flag) { PrintWriter writer = resp.getWriter(); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss"); Date date = new Date(); String formatTime = simpleDateFormat.format(date); formatTime = URLEncoder.encode(formatTime, "utf-8"); Cookie cookie = new Cookie("lastTime", formatTime); cookie.setMaxAge(60 * 60 * 24 * 30); resp.addCookie(cookie); writer.write("欢迎您首次访问页面!"); } } }
标签:cookie,对象,resp,Cookie,formatTime,使用,import,客户端 来源: https://blog.csdn.net/qq_46847568/article/details/115679839