一文详解Cookie,Session以及浏览器与Cookie,Session的底层联系

Cookie:

  1. 翻译过来就是饼干的意思
  2. Cookie是服务器用于保存键值对的一种技术,保存的是一段文本信息。
  3. 客户端有了Cookie之后,每次请求都会发送给服务器
  4. 每个Cookie的大小不能超过4KB

创建Cookie

Cookie cookie = new Cookie (“key”,“Value”);
resp.addCookie(Cookie);

服务器获取Cookie

req.getCookies();
//这里获取的其实是一个Cookie数组

获取的是以一个Cookie数组,但是并不是相对于map那样可以直接获取键值,需要挨个进行遍历

Cookie值的修改

有两种方法:

  1. 首先创建一个和原来那个Cookie同名的Cookie键,然后在构造器中赋予新的值,最后通过resp.addCookie(Cookie)加入Cookie
  2. 首先挨个进行遍历每一个Cookie,调用setValue方法赋予新的Cookie值,通过resp.addCookie(Cookie)方法保存加入Cookie

Cookie的生命控制

setMaxAge()方法

  1. 正数,表示在指定的秒数后面过期
  2. 负数,表示浏览器一关,Cookie就会被删除(默认值是-1)
  3. 0,表示马上删除Cookie
    Cookie通过有效路径去过滤掉哪些Cookie可以发送给服务器

Session

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

Session创建以及获取

req.getSession()
第一次调用是创建Session会话
之后调用的时候都是获取前面创建好的Session会话对象

isNew()判断是不是刚创建出来的Session
true
false

每一个Session都会有一个ID值,这个ID是唯一的,getId()是得到Session的会话id值

Session生命周期的控制

public void setMaxInactiveInterval(int interval) 设置 Session 的超时时间(以秒为单位),超过指定的时长,Session
就会被销毁。
值为正数的时候,设定 Session 的超时时长。
负数表示永不超时(极少使用)
public int getMaxInactiveInterval()获取 Session 的超时时间
public void invalidate() 让当前 Session 会话马上超时无效。
Session 默认的超时时长是多少!
Session 默认的超时时间长为 30 分钟。
因为在 Tomcat 服务器的配置文件 web.xml 中默认有以下的配置,它就表示配置了当前 Tomcat 服务器下所有的 Session
超时配置默认时长为:30 分钟。

30

如果说。你希望你的 web 工程,默认的 Session 的超时时长为其他时长。你可以在你自己的 web.xml 配置文件中做
以上相同的配置。就可以修改你的 web 工程所有 Seession 的默认超时时长

浏览器与Cookie,Session的底层联系

  1. 首先客户端没有任何的Cookie信息,向服务器请求数据
  2. 服务器收到请求(服务器端有一个服务器内存,在服务器内存中存储着创建过的Session对象,每一个Session对象都会有一个ID值),创建一个Session对象,返回给浏览当前创建Session的ID值
  3. 浏览器收到之后就会马上创建一个Cookie,这个Cookie是当前Session对象的Cookie值,这也说明了之前为什么说Cookie对应的是一个文本信息。

为什么浏览器关闭,Session就不存在了?

Session在创建之后,是使用Cookie来进行存储转发的,浏览器一关闭Cookie不是保存在浏览器端吗?为什么会丢失了?
其实Cookie是是分为一种在线的Cookie和本地的Cookie,之前说的就是在线Cookie,一个Cookie是对应一个线程,当浏览器关闭之后这个进程就关闭了,之后浏览器就找不到这个Session的ID就会重新在创建一个,原来的那个Session对象其实还存在,直到自己的时间结束。

你可能感兴趣的:(Java基础,JavaWeb,idea入门,java,tomcat,intellij-idea)