title: 【学习之路】Cookie&Session学习
draft: true
tags:


什么是Cookie

  1. Cookie翻译过来是饼干的意思
  2. Cookie是服务器通知客户端保存键值对的一种技术
  3. 客户端有了Cookie后,每次请求都会发送给服务器
  4. 每个Cookie的大小不能超过4kb

Cookie的创建

  • 服务器创建Cookie对象
  • 通过响应头Set-Cookie,通知客户端保存Cookie
  • 客户端浏览器接受没有Set-Cookie就创建Cookie有就进行修改
  1. protected void createCookie(HttpServletRequest req, HttpServletResponse resp) throws ServletException{
  2. Cookie cookie = new Cookie("key1", "value2");
  3. //通知客户端保存Cookie
  4. resp.addCookie(cookie);
  5. }

服务器如何获取Cookie

  • 服务器获取客户端的Cookie使用 : req.getCookies()返回值是Cookie[]

由于每次获取Cookie都需要从数组里遍历出来为了减少代码耦合可以将这些代码封装成一个工具类便于使用

  1. public class CookieUtils{
  2. public static Cookie findCookie(String name, Cookie[] cookies){
  3. if (name == null || cookies == null || cookies.length == 0){
  4. return null;
  5. }
  6. for (Cookie cookie : cookies){
  7. if (name.equals(cookie.getName)){
  8. return cookie;
  9. }
  10. }
  11. return null;
  12. }
  13. }

Cookie值的修改

  • 方案一:

    1. 创建一个相同key的Cookie对象
    2. 在构造器,同时赋于新的Cookie值
    3. 调用response.addCookie(Cookie);
  • 方案二:

    1. 先找到需要修改的Cookie对象
    2. 调用setValue()赋于新的Cookie值
    3. 调用response.addCookie()通知客户端保存修改

谷歌浏览器浏览器如何查看Cookie

CookieAndSession - 图1

Cookie生命控制

  1. **Cookie生命控制指的是如何管理Cookie什么时候被销毁**
  • 通过调用setMaxAge() 管理Cookie

    • 正数表示在指定的秒数后过期
    • 负数表示浏览器一关Cookie就会被自动删除(默认值是-1)
    • 0表示马上删除Cookie

什么是Session会话

  1. Session就是一个接口(HttpSession)
  2. Session就是会话,是用来维护一个客户端和服务器之间关联的技术
  3. 每个客户端都有自己的一个Session会话
  4. Session会话中,我们经常用来保存用户登录之后的信息

如何创建Session和获取ID号是否为新

  • 使用request.getSession()获取Session

    • 第一次调用都是创建Session会话,之后调用都是获取前面创建好的Session会话对象
  • 通过isNew()判断到底是不是新的Session会话 true表示新 false表示获取之前创建

每个会话都会有一ID号,而且这个ID号是唯一的。通过getId得到Session的会话ID值

Session生命周期控制

  • 使用setMaxInactiveInterval(int interval)设置Session的超时时间(以秒为单位),超过设置时长Session就会被销毁

    • 值为正数时,设定Session的超时时长
    • 负数表示永不超时(极少使用)
    • 使用invalidate()方法让当前Session会话马上超时无效

Session的默认超时时长

在Tomcat服务器配置文件web.xml中有默认配置,默认时长为30分钟

  1. <session-config>
  2. <session-timeout>30</session-timeout>
  3. </session-config>

如果你希望你的Web工程,默认的时长为其他时长的话可以修改Tomcat里的配置文件

如果你只是修改个别Session的超时时长那么推荐使用setMaxInactiveInterval(int interval)进行单独的设置

Session超时时长的概念介绍

  1. **Session超时时长指的是,客户端两次请求的最大间隔时长**

浏览器和Session之间的关联

  1. **Session技术,底层是基于Cookie技术来实现的**
  1. 当客户端浏览器没有任何Cookie的时候会给服务器发送请求
  2. 服务器(Tomcat) getSession会创建会话对象,服务器每次创建Session会话的时候都会创建一个Cookie对象。这个Cookie对象的key永远是JSESSIONID值是新创建出来的Session的id值
  3. 通过响应把新创建出来的Session的ID返回给客户端,浏览器解析接收到的数据,就马上创建一个Cookie对象
  4. 后面有了Cookie之后,每次请求,都会把Session的ID以Cookie的形式发送给服务器
  5. getSession通过Cookie中的id值找到自己创建好的对象,并返回

如果这个Cookie被删除那么寻找Session的ID值也会丢失,服务器就会另外创建一个Session和Cookie,就是重复执行上面的操作