JavaWeb-Cookie与Session会话

目录

一、会话控制引入

二、Cookie

2.1 创建/获取 Cookie

2.2 Cookie的修改

2.3  Cookie的生命周期

三、Session创建与使用


一、会话控制引入

        Http无状态的
        - HTTP 无状态 :服务器无法判断这两次请求同一个客户端发过来的,还是不同的客户端发过来的
        - 无状态带来的现实问题:第一次请求是添加商品到购物车,第二次请求是结账;如果这两次请求服务器无法区分是同一个用户的,那么就会导致混乱
        - 通过会话跟踪技术来解决无状态的问题。

        什么是 Session 会话?

        1、 Session 就一个接口HttpSession) 。

        2、 Session 就是会话。 它是用来维护一个客户端服务器之间关联的一种技术。

        3、 每个客户端都有自己的一个 Session 会话。

        4、 Session 会话中, 我们经常用来保存用户登录之后的信息

         会话跟踪技术
        - 客户端第一次发请求给服务器,服务器获取session,获取不到,则创建新的,然后响应给客户端
        - 下次客户端给服务器发请求时,会把sessionID带给服务器,那么服务器就能获取到了,那么服务器就判断这一次请求和上次某次请求是同一个客户端,从而能够
区分开客户端

二、Cookie

        本质:

  • 在浏览器端临时存储数据
  • 键值对
  • 键和值都是字符串类型
  • 数据量很小
  • 客户端有了 Cookie 后, 每次请求都发送给服务器。

  • 每个 Cookie 的大小不能超过 4kb

2.1 创建/获取 Cookie

// 1.创建Cookie对象
Cookie cookie = new Cookie("cookie-message", "hello-cookie");

// 2.将Cookie对象添加到响应中
response.addCookie(cookie);

// 3.服务器获取客户端的 Cookie 只需要一行代码
 Cookie[] cookies = req.getCookies(); 

2.2 Cookie的修改

  • 方案一:
    • 1、 先创建一个要修改的同名(指的就是 key) 的 Cookie 对象
    • 2、 在构造器, 同时赋于新的 Cookie 值。
    • 3、 调用 response.addCookie( Cookie );
  • 方案二:
    • 1、 先查找到需要修改的 Cookie 对象
    • 2、 调用 setValue()方法赋于新的 Cookie 值。
    • 3、 调用 response.addCookie()通知客户端保存修改

2.3  Cookie的生命周期

  • 会话级Cookie
    • 服务器端并没有明确指定Cookie的存在时间
    • 浏览器端,Cookie数据存在于内存
    • 只要浏览器还开着,Cookie数据就一直都在
    • 浏览器关闭,内存中的Cookie数据就会被释放
  • 持久化Cookie
    • 服务器端明确设置了Cookie的存在时间
    • 浏览器端,Cookie数据会被保存到硬盘
    • Cookie在硬盘上存在的时间根据服务器端限定的时间来管控,不受浏览器关闭的影响
    • 持久化Cookie到达了预设的时间会被释放
// 给Cookie设置过期时间
// 正数:Cookie的过期时间,以秒为单位
// 负数:表示这个Cookie是会话级的Cookie,浏览器关闭时释放
// 0:通知浏览器立即删除这个Cookie

cookie.setMaxAge(20);

三、Session创建与使用

          request.getSession() -> 获取当前的会话,没有则创建一个新的会话
          request.getSession(true) -> 效果和不带参数相同
          request.getSession(false) -> 获取当前会话,没有则返回null,不会创建新的

          session.getId() -> 获取sessionID
          session.isNew() -> 判断当前session是否是新的
          session.getMaxInactiveInterval() -> session的非激活间隔时长,默认1800秒
          session.setMaxInactiveInterval() -> 设置session的非激活间隔时长
          session.invalidate() -> 强制性让会话立即失效

  • Session 域数据存取

 

       在session域保存数据

                setAttribute("key1", "value1");  -> 保存一个 k-v 值

        在session域读取数据

                getAttribute("key1");

        删除session域的数据

                removeAttribute(k)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值