对Cookie运用的实战与原理剖析详解
  HJwyUgQ6jyHT 12天前 29 0

一.Javaweb Cookie

1.1 会话

用户打开浏览器,单击多个超链接,访问多个web资源,然后关闭浏览器的过程叫做会话。

1.2 Cookie和Session的区别

Cookie:服务端给了客户端一个标头,客户端下次访问带上标头即可,在本地保存。

Session:服务器登记本机访问记录,下次访问服务器匹配数据库数据。

1.3 保存会话的俩种技术

Cookie

  • 客户端的技术,主要有响应和请求

Session

  • 服务器端的技术,利用这个技术,可以保存用户的会话记录。
  • 可以把信息和数据保存在session里。

二.对于Cookie记录实战

1.新建立maven工程,工程名为:servlet-session-chookie。

2.新建java目录为,存放项目的目录路径。

3.新建接口,接口名为:com.gowork.servlet。

4.在com.gowork.servlet接口下新建类,类名为CookieDemo1。

5.继承类HttpServlet,重写doGet方法,doPost指向doGet。

6.提前设置编码类型,请求和我响应:

req.setCharacterEncoding("utf-8");
resp.setCharacterEncoding("utf-8");

7.chookie服务端想客户端获取。

Cookie[] cookies = req.getCookies();

8.服务器每次访问,获取一次时间存储。

Cookie cookie = new Cookie("lasttime", System.currentTimeMillis() + "");
resp.addCookie(cookie);

9.如果第7步的cookies不为空的话。输出上一次访问的时间的提示语句。

遍历cookies,获取cookies名称为低8步骤的lasttime的值,进行响应个前端。

for(int i=0;i < cookies.length; i++){
    Cookie cookie = cookies[i];
    if(cookie.getName().equals("lasttime") ){
        cookie.getValue();
        long l = Long.parseLong(cookie.getValue());
        Date date = new Date(l);
        out.write(date.toLocaleString());
    }

10.如果第8步的cookies为空的话,输出:第一次访问。

并且下面的cookie继续执行,获取到当前时间存储到用户本地的chooice里,名称为“:lasttime,看上面的第八步。

11.配置注册url,写url的映射。

  <servlet>
    <servlet-name>cookie</servlet-name>
    <servlet-class>com.gowork.servlet.CookieDemo1</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>cookie</servlet-name>
    <url-pattern>/co5</url-pattern>
  </servlet-mapping>

12.设置tomact的访问路径。

C:\Users\24190\IdeaProjects\xiao\servletr-session-chookie\src\main\webapp

13.启动tomact服务器。访问路径:

localhost:8080/servletr-session-chookie/co5

14.访问效果图如下:

第一次访问:

对Cookie运用的实战与原理剖析详解

多次访问;

对Cookie运用的实战与原理剖析详解

15.设置cookie的有效期:

cookie.setMaxAge(24*60*60);

运行项目,打开F12,查看网络,发现有效期为一天。

Set-Cookie: lasttime=1661136845468; Max-Age=86400; Expires=Tue, 23-Aug-2022 02:54:05 GM

2.1 cookie常用合集

获取cookie:

 Cookie[] cookies = req.getCookies();

获取cookie的key和value:

cookie.getName()
cookie.getValue()

新建一个cookie:

Cookie cookie = new Cookie("lasttime", System.currentTimeMillis() + "");

设置cookie的有效期:

cookie.setMaxAge(24*60*60)

响应个客户端一个cookie:

resp.addCookie(cookie);

2.2 细节问题

  • 一个cookie只能保存一条信息;
  • 一个网站可以向浏览器发送多个cookie,并最多存储20个cookie;
  • Cookie大小限制为4KB;
  • 300个Cookie浏览器限制;

删除cookie:

  • 不设置有效期,关闭浏览器,自动失效
  • 设置有效期,超出有效期,cookie失效
  • 设置有效期时间为0

2.3 删除一个cookie

1.创建一个cookie的类,类名为:CookieDemo2

2.继承HttpServlet,重写doGet方法,doPost方法指向于doGet。

3.创建一个cookie,名称要与被删除的cookie相同。

Cookie cookie = new Cookie("lasttime", System.currentTimeMillis() + "");

4.设置cookie的有效期为0:

cookie.setMaxAge(0);

5.响应回客户端。

resp.addCookie(cookie);

6.注册url,写映射:

  <servlet>
    <servlet-name>cookie02</servlet-name>
    <servlet-class>com.gowork.servlet.CookieDemo2</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>cookie02</servlet-name>
    <url-pattern>/co2</url-pattern>
  </servlet-mapping>

7.启动web容器,访问url观察:

第二次访问:co5:

对Cookie运用的实战与原理剖析详解

访问co2,删除cookie:

对Cookie运用的实战与原理剖析详解

再次访问co5:

对Cookie运用的实战与原理剖析详解

结果发现cookie被删除,变为第一次访问!

2.4 编码解码

在前后端传输过程请中,对中文传输容易造成乱码问题。这里用到网络编程的知识点,编码与解码:

编码:

Cookie cookie = new Cookie("name", URLEncoder.encode("菜猪", StandardCharsets.UTF_8));

解码:

out.write(URLDecoder.decode(cookie.getValue(), StandardCharsets.UTF_8));

编码解码效果成功图如下:

对Cookie运用的实战与原理剖析详解

这样传输更加安全,有效的避免了中文乱码问题。

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 12天前 0

暂无评论

推荐阅读
  HJwyUgQ6jyHT   12天前   26   0   0 nfs客户端
HJwyUgQ6jyHT