JavaWeb-Cookie详解

会话技术

在学习cookie和session之前先要了解什么是会话技术
会话:一次会话中包含多次请求和响应

  • 一次会话:浏览器第一次给服务器资源发送请求,会话建立,直到有一方断开为止

功能:在一次会话的范围内的多次请求间共享数据
方式

  • 客户端会话技术:Cookie
  • 服务端会话技术:Session

Cookie

1.概念: 客户端会话技术,将数据保存到客户端
2.使用方式
cookie执行流程:客户端第一次请求服务器后,服务器产生并响应给客户端一个cookie,客户端得到后并保存,在第二次请求服务器时将客户端的cookie发送给服务器,服务器获取cookie并打印(得到的是cookie数组)

注意:在没有设置cookie存活时间的前提下,只能是一次会话范围,期间关闭浏览器或服务器或者用另外的浏览器都将得不到结果
在这里插入图片描述
可以得到打印结果:msg:hello
3.实现原理
在这里插入图片描述
不管是发送还是获取cookie,他们都是通过http协议经行数据交互,第一次服务器响应时通过设置set-cookie响应头给客户端发送消息,客户端遵循http协议得到set-cookie中存储的值并保存,在下一次请求时该数据被放到请求头cookie中,以上都是浏览器和服务器做的事,我们开发人员只是通过javaweb封装好的api来发送或者获取cookie,下面我们来看通过抓包工具来验证一下:
在这里插入图片描述
4.发送多个cookie

//1.创建cookie
        Cookie c = new Cookie("msg","hello");
        Cookie c1 = new Cookie("name","张三");
        //2.发送cookie(服务器发送给浏览器)
        resp.addCookie(c);
        resp.addCookie(c1);

5.cookie存活时间

  • 默认情况下,浏览器关闭Cookie数据被销毁(Cookie存储在浏览器内存中)
  • 持久化存储:
    • setMaxAge(int second)
      • 参数为正数:将cookie数据写到硬盘的文件中,持久化储存,达到规定的时间将会被自动删除
      • 参数为负数:默认值
      • 参数为0:删除cookie信息

6.cookie存储中文
tomcat8之前不能存储中文信息,否则会发生错误
在这里插入图片描述
7.cookie共享
1.在一个tomcat服务器中部署了多个web项目,这些web项目中的cookie默认情况下不能共享

  • setPath(String path):设置cookie的获取范围,默认情况下设置为当前虚拟目录,可以更改为"/",表示tomcat所有项目

2.不同tomcat服务器之间cookie共享问题

  • setDomain(String path):如果设置一级域名相同,那么多个服务器之间cookie可以共享
    • setDomain(".baido.com"),那么news.baidu.com和tieba.baidu.com可以共享cookie

8.cookie特点和作用
特点

  • cookie存储数据在客户端浏览器,不安全
  • 浏览器对于单个cookie大小有限制 (4kb),以及同一个域名下的总cookie数量也有限制(20个)

作用

  • cookie一般用来存储少量不太敏感的数据
  • 在不登录的情况下,完成服务器对客户端身份的识别
发布了37 篇原创文章 · 获赞 11 · 访问量 3902

猜你喜欢

转载自blog.csdn.net/Alphr/article/details/104607695