Cookie

Cookie

1、会话(Session):用户打开一个浏览器,点击了很多超链接,访问多个web资源,关闭浏览器,这个过程成为会话。

2、有状态会话:一个同学来过教师,下次再来教室,我们知道这个同学来过,就叫做有状态会话。

3、一个网站如何证明你来过:

    3.1 服务端给客户端一个信件(cookie),客户端下次访问服务端,带上信件就可以了。

    3.2 服务器登记你来过(session),下次你来的时候,自动匹配你。

4、 保存会话的两种技术:

    4.1 cookie:cookie是一种客户端技术,如何在服务器上把东西发给客户端是通过响应;客户端把东西发给服务器是通过请求

    4.2 session:服务器登记你来过,利用session,服务器保留会话信息。我们可以把信息或数据放在session中。

常见应用:网站登录后,第二次访问不用登录了,直接就上去了。

1、 建项目+改web.xml文件+删除多余依赖+导入依赖

 

2、 写class

 

 1 package com.wang.servlet;
 2 
 3 import javax.servlet.ServletException;
 4 import javax.servlet.http.Cookie;
 5 import javax.servlet.http.HttpServlet;
 6 import javax.servlet.http.HttpServletRequest;
 7 import javax.servlet.http.HttpServletResponse;
 8 import java.io.IOException;
 9 import java.io.PrintWriter;
10 import java.util.Date;
11 
12 public class CookieDemo01 extends HttpServlet {
13     @Override
14     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
15         //服务器,把上次你来的时间封装成一个cookie,你下次再来,就知道你来了
16         //解决中文乱码问题
17         req.setCharacterEncoding("utf-8");
18         resp.setCharacterEncoding("utf-8");
19         resp.setHeader("content-type", "text/html;charset=UTF-8");
20         PrintWriter out = resp.getWriter();
21         //Cookie,服务器从客户端获取
22         Cookie[] cookies = req.getCookies();  //这里返回数组,说明Cookie可能存在多个
23         //判断Cookie是否存在
24         if (cookies != null) {
25             //如果存在
26             out.write("上一次访问时间为:");
27             for (int i = 0; i < cookies.length; i++) {
28                 Cookie cookie = cookies[i];
29                 //获取cookies名字
30                 if (cookie.getName().equals("lastLoginTime"))
31                 {
32                     long lastLoginTime = Long.parseLong(cookie.getValue());
33                     Date date = new Date(lastLoginTime);
34                     out.write(date.toLocaleString());
35                 }
36             }
37         } else {
38             out.write("这是你第一次访问本站");
39         }
40         //服务给客户端响应一个cookie
41         Cookie cookie = new Cookie("lastLoginTime", System.currentTimeMillis() + "");
42         resp.addCookie(cookie);
43     }
44 
45     @Override
46     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
47         doGet(req, resp);
48     }
49 }
View Code

3、 注册

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 
 3 <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
 4          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 5          xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
 6                       http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
 7          version="4.0"
 8          metadata-complete="true">
 9     <!--注册和映射-->
10     <servlet>
11         <servlet-name>CookieDemo01</servlet-name>
12         <servlet-class>com.wang.servlet.CookieDemo01</servlet-class>
13     </servlet>
14     <servlet-mapping>
15         <servlet-name>CookieDemo01</servlet-name>
16         <url-pattern>/c1</url-pattern>
17     </servlet-mapping>
18 </web-app>
View Code

4、 配置Tomcat

5、 运行

 

 

 

 

 

 如关闭浏览器,则上述访问时间清空。

6、 若关闭浏览器后仍想保存访问记录,需要设置有效期

1 //设置有效期,有效期为一天
2 cookie.setMaxAge(24*60*60);
View Code

6、 总结上述用到的方法

7、 补充一个可能因为中文导致问题的解决办法

通过重新编码,和使用时的解码

 1 URLEncoder.encode("王赞","utf-8"); //编码 2 URLDecoder.decode(cookie.getValue(),"utf-8"); //解码 

 

posted @ 2020-03-27 22:42  WZ_BeiHang  阅读(133)  评论(0)    收藏  举报