学静思语
Published on 2025-02-13 / 1 Visits
0
0

javaWeb之Cookie和Session

javaWeb之Cookie和Session

一、cookie

1.Cookie的简单示意图

Cookie的简单示意图

2.Cookie的解说

  • Cookie是服务器在客户端(浏览器端)保存用户的信息,比如登录名,浏览历史等,就可以以Cookie的方式保存。
  • Cookie的数据量并不大,因此不能携带数据量大的文件,服务器端在需要的时候可以从客户端(浏览器端)读取保存在它本地的Cookie信息,是通过http协议
  • Cookie数据是保存在浏览器的

3.Cookie的作用

  • 保存上次登录时间等信息
  • 保存用户名、密码,在一定时间不用重薪登录
  • 网站的个性化,比如定制网络的服务、内容。

4.Cookie常用方法

  • cookie有点像一张表(key-value),分两列,一个是名字,一个是值,数据类型都是String数据类型。(可以理解为其内部维护了一个类似Map的容器)

  • 如何创建一个Cookie(它在服务器端创建的,在浏览器端(客户端)保存的)

  • Cookie cookie = new Cookie(String name,String value);
    
  • 如何将一个Cookie添加到客户端(浏览器端)

  • response.addCookie(Cookie cookie);
    
  • 如何读取保存在浏览器端(客户端)本地的Cookie{在服务器端读取Cookie信息}

  • request.getCookies();//返回的是一个Cookie数组,因为浏览器端(客户端)可能通过http响应携带大量的Cookie信息,但是这些Cookie还在生命周期内或没有在删除
    
  • 如何设置保存时间

  • cookie.setMaxAge();//[cookie]指定的Cookie对象
    

5.Cookie的生命周期

  • Cookie的生命周期指的是如何管理Cookie什么时候被销毁(删除)
  • 注意
    • 如果你设置的设置的时间到了,也就意味着这个Cookie的生命结束了,但是浏览器可能没有删除这个Cookie,只是每次请求的时候不会携带这个Cookie了
  • 是通过setMaxAge(int expiry)设置Cookie的生命周期的,如果没有设置都是默认值,也就是会话级别,浏览器关闭就生命结束了,这个以秒为单位。
  • 正数,表示在指定的秒数后过期
  • 负数,表示浏览器关闭,Cookie就会被删除(默认值是-1)
  • 0,表示马上删除cookie,浏览器会删除该Cookie,也就是在它的本地删除

6. Cookie的有效路径规则

  • Cookie的path属性可以有效的过滤哪些Cookie可以发送给服务器,哪些不可以发。path属性通过请求的地址来进行有效的过滤

  • 规则如下:

  • cookie1.setPath = /工程路径
    cookie2.setPath = /工程路径/aaa    
    
  • 请求地址:http://ip:port/工程路径/资源

    • cookie1会发给服务器
    • cookie2不会发给服务器
  • 请求地址:http://ip:port/工程路径/aaa/资源

    • cookie1会发给服务器
    • cookie2会发给服务器
  • 注意,只要请求地址包含Cookie设置的path就会被http请求给携带,所以大部分情况是使用默认的path,也就是/工程路径

7.Cookie注意事项和细节

  • 一个Cookie只能标识一种信息,它至少有一个标识该信息名称(NAME)和设置值(VALUE)
  • 一个WEB站点可以给一个浏览器发送多个Cookie,一个浏览器也可以存储多个WEB站点提供的Cookie
  • Cookie的总量没有限制,但是每一个域名的Cookie数量和每个Cookie的大小是有限制的(不同的浏览器限制不同,注意即可),Cookie不适合存放数据量大的信息
  • 注意,删除Cookie是,Path必须一致,否则不会删除
  • 注意,Cookie存放中文会报错,得将中文编码成可以存放的格式
  • 可以通过URL编码和解码来解决,不建议存放中文的Cookie信息

二、session

1.Session原理示意图

session简单的示意图

  • 当用户打开浏览器,访问某个网站,操作session时服务器就会在内存中(在服务端)为该浏览器分配一个session对象,该session对象被这个浏览器独占
  • 这个session对象也可以看做是一个容器,session对象默认存在时间为30分钟,也可以在tomcat的conf目录下的web.xml修改

2.Session作用

  • 网上商城中的购物车
  • 保存登录用户的信息
  • 将数据放入到Session中,供用户在访问不同页面时,实现款页面访问数据
  • 防止用户非法登录到某个页面

3.如何理解Session

  • session存储结构示意图

    image-20231103195139983

  • 你可以把Session看作是一个容器类HashMap,有两列(key-value),每一行就是Session的一个属性

  • 每个属性包含有两个部分,一个是该属性的名字(String),另外一个是它的值(Object)

4.Session的基本使用

image-20231103195139983

  • 创建和获取Session,是同一个方法,API一样

  • HttpSession session = request.getSession();
    //第一次调用是创建Session会话,之后调用是获取创建好的Session对象
    
  • 向Session添加属性

  • session.setAttribute(String name,Object object);
    
  • 从Session得到某个属性

  • Object obj = session.getAttribute(String name);
    
  • 从Session删除掉某个属性

  • session.removeAttribute(String name);
    
  • 判断是不是刚创建出来的Session

  • session.isNew();
    
  • 每一个Session都有一个唯一标识的ID

  • session.getId();
    

5.Session生命周期-说明

  • public void setMaxInactiveInterval(int interval)设置Session的超时时间(以秒为单位),超过指定的时长,Session就会被销毁
  • 值为正数的时候,设定的为Session的超时时长,记住Session的生命周期是两次会话的间隔,若果两次会话超过设定的时间,则会被销毁,如果在间隔时间内则会再刷新时间,从零开始计时
  • 负数表示永不超时,除了服务器重启
  • public int getMaxInactiveInterval()获取Session的超时时间
  • public void invalidate()让当前Session会话立即无效
  • 如果没有调用setMaxInactiveInterval()来指定Session的生命时长,Tomcat会以Session默认时长为准,Session默认的超时为30分钟,可以在Tomcat的web.xml设置
  • Session的生命周期指的是:客户端/浏览器两次请求最大间隔时长,而不是累积时长。即当客户端访问了自己的Session,Session的生命周期将从0开始重新计算(指的是同一个会话两次请求之间的间隔时间,如果在生命周期的时间内,则生命周期又从0开始计时)
  • 底层:Tomcat用一个线程来轮询会话状态,如果某个会话的空闲时间超过设定的最大值,则将该会话销毁

6.生命周期注意事项

  • 指的是两次访问Session的最大间隔时间
  • 如果你在Session没有过期的情况下,操作Session,则会重新开始计算生命周期
  • Session是否过期,是由服务器来维护和管理的
  • 如果我们调用了invaliate()会直接将该Session删除/销毁
  • 如果希望删除Session对象的某个属性,使用removeAttribute();

Comment