【JavaWeb】会话跟踪技术Cookie与Session原始真解(下)

简介: 文章目录1 什么是会话?2 Cookie技术2.1 Cookie简介2.2 Cookie的理解与创建2.3 服务器获取Cookie与Cookie的修改2.4 Cookie的生命控制与生命周期2.5 Cookie有效路径Path设置3 Session会话技术3.1 初探Session3.2 Session的创建、获取与基本使用3.3 Session的生命控制与生命周期3.4 如何理解Session底层是基于Cookie实现的?

cookie的存活时间变成了3天

需要注意: Cookie不能直接存储中文,要通过转码(URL编码,encode()/decode())

扩展: 可以通过生命控制实现cookie的删除

    protected void deleteNow(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //找到要删除的Cookie对象
        Cookie findKey = CookieUtils.findCookie("findKey", req.getCookies());
        if (findKey != null){
            //调用setMaxAge(0)
            findKey.setMaxAge(0); //马上删除,不用关闭浏览器
            //修改后生效
            resp.addCookie(findKey);
        }
    }

2.5 Cookie有效路径Path设置

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

规则:

cookieA.setPath = /工程路径

cookieB.setPath = /工程路径/abc

1.当请求地址为: http://localhost:800/工程路径/资源 时

cookieA会发给服务器而cookieB不会发给服务器

2.当请求地址为: http://localhost:8080/工程路径/abc/资源

cookieA、cookieB都会发给服务器

3 Session会话技术

3.1 初探Session

Session是服务端会话跟踪技术。

用户登录网站后,不管该用户浏览该网站的哪个页面,都可显示登录人的名字, 还可以随时去查看个人信息等等。即,一个用户在浏览网站不同页面时,通过Session,服务器可以知道是哪个用户在访问该页面并且做出反馈。

Session是一个接口,HttpSession

Session 就是会话,是用来维护客户端和服务器之间关联的一种技术

每个客户端都有一个Session会话

Session会话中,经常保存用户登录后的信息。

当用户打开浏览器,访问某个网站, 操作session时服务器就会在内存(在服务端)为该浏览器分配一个session 对象,该session对象被这个浏览器独占

3.2 Session的创建、获取与基本使用

创建与获取Session的API相同:

request.getSession();
1

第一次调用:创建Session会话

往后:获取创建好的Session会话对象

通过isNew()方法,可以判断该Session是否为新对象。

每个会话都具有一个号码id值,且该id唯一! 通过 getId()可以获取Session会话对象的id值。

基本使用总结:

//1.创建和获取 Session
HttpSession hs=request.getSession();
//2.向session 添加属性
hs.setAttribute(String name,Object val); 
//3.从session 得到某个属性
Object obj=hs.getAttribute(String name);
//4.从session 删除某个属性
hs.removeAttribute(String name); 
//5.判断是不是刚创建出来的Session 
boolean flag = hs.isNew();
//6.每个Session都有唯一标识id值,通过getid() 得到Session的会话id 值
hs.getId();

3.3 Session的生命控制与生命周期

Session不能长时间保存数据,浏览器关闭后再获取的不是同一个Session对象。

通过setMaxInactiveInterval(int interval)可以设置Session的超时时间(以秒为单位),超过指定的时长,Session 就会被销毁。值为正数的时候,设定Session的超时时长,负数则表示永不超时。

相应的getMaxInactiveInterval()可以获取Session的超时时间,而invalidate() 可以让当前 Session 会话立即无效

默认情况下:

Tomcat会以 Session 默认时长为准,Session 默认的超时为 30 分钟,可以在 tomcat的web.xml 设置,代码和图示如下:

<session-config>
    <session-timeout>30</session-timeout>
</session-config>

补充知识:

Session的钝化与活化

钝化:在服务器正常关闭后,Tomcat会自动将Session数据写入硬盘的文件中

活化:再次启动服务器后,从文件中加载数据到Session中

对Session生命周期的理解:

与Cookie的生命周期不同的是,Session的生命周期指的是客户端/浏览器两次请求最大间隔时长,而不是累积时长。

如果在允许的间隔时间内,客户端访问了自己的session,则会从0重新计时。

3.4 如何理解Session底层是基于Cookie实现的?

在浏览器没有任何Cookie信息时,向服务端发送请求的时候,会通过request.getSession()创建会话对象。服务器每次创建会话对象的时候,都会创建一个Cookie对象,其Key是:JSESSIONID,Value是新创建的Session的id值。

于是,服务端通过响应的方式把新创建的Session的id返回给客户端,当浏览器解析到数据后,马上就会创建一个Cookie对象。

而后,浏览器已经有了相应的Cookie信息,每次请求,都会把Session的id以Cookie的形式发送给服务器,而服务器则会通过id值找到之前创建好的Session对象并返回。

示意图如下:

相关文章
|
2月前
|
存储 前端开发 Java
【SpringMVC】——Cookie和Session机制
获取URL中参数@PathVarible,上传文件@RequestPart,HttpServerlet(getCookies()方法,getAttribute方法,setAttribute方法,)HttpSession(getAttribute方法),@SessionAttribute
|
3月前
|
存储 安全 搜索推荐
理解Session和Cookie:Java Web开发中的用户状态管理
理解Session和Cookie:Java Web开发中的用户状态管理
109 4
|
3月前
|
存储 缓存 网络协议
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点,GET、POST的区别,Cookie与Session
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点、状态码、报文格式,GET、POST的区别,DNS的解析过程、数字证书、Cookie与Session,对称加密和非对称加密
|
4月前
|
缓存 Java Spring
servlet和SpringBoot两种方式分别获取Cookie和Session方式比较(带源码) —— 图文并茂 两种方式获取Header
文章比较了在Servlet和Spring Boot中获取Cookie、Session和Header的方法,并提供了相应的代码实例,展示了两种方式在实际应用中的异同。
285 3
servlet和SpringBoot两种方式分别获取Cookie和Session方式比较(带源码) —— 图文并茂 两种方式获取Header
|
4月前
|
存储 安全 数据安全/隐私保护
Cookie 和 Session 的区别及使用 Session 进行身份验证的方法
【10月更文挑战第12天】总之,Cookie 和 Session 各有特点,在不同的场景中发挥着不同的作用。使用 Session 进行身份验证是常见的做法,通过合理的设计和管理,可以确保用户身份的安全和可靠验证。
82 1
|
5月前
|
存储 缓存 数据处理
php学习笔记-php会话控制,cookie,session的使用,cookie自动登录和session 图书上传信息添加和修改例子-day07
本文介绍了PHP会话控制及Web常用的预定义变量,包括`$_REQUEST`、`$_SERVER`、`$_COOKIE`和`$_SESSION`的用法和示例。涵盖了cookie的创建、使用、删除以及session的工作原理和使用,并通过图书上传的例子演示了session在实际应用中的使用。
php学习笔记-php会话控制,cookie,session的使用,cookie自动登录和session 图书上传信息添加和修改例子-day07
|
5月前
|
存储 安全 NoSQL
Cookie、Session、Token 解析
Cookie、Session、Token 解析
116 1
|
5月前
|
存储 前端开发 Java
JavaWeb基础7——会话技术Cookie&Session
会话技术、Cookie的发送和获取、存活时间、Session钝化与活化、销毁、用户登录注册“记住我”和“验证码”案例
JavaWeb基础7——会话技术Cookie&Session
|
6月前
|
存储 JavaScript 前端开发
Cookie 反制策略详解:Cookie加解密原理、Cookie和Session机制、Cookie hook、acw_sc__v2、jsl Cookie调试、重定向Cookie
Cookie 反制策略详解:Cookie加解密原理、Cookie和Session机制、Cookie hook、acw_sc__v2、jsl Cookie调试、重定向Cookie
418 1
|
6月前
|
存储 安全 搜索推荐
【JavaWeb 秘籍】Cookie vs Session:揭秘 Web 会话管理的奥秘与实战指南!
【8月更文挑战第24天】本文以问答形式深入探讨了Web开发中关键的会话管理技术——Cookie与Session。首先解释了两者的基本概念及工作原理,随后对比分析了它们在存储位置、安全性及容量上的差异。接着,通过示例代码详细介绍了如何在JavaWeb环境中实现Cookie与Session的操作,包括创建与读取过程。最后,针对不同应用场景提供了选择使用Cookie或Session的指导建议,并提出了保障二者安全性的措施。阅读本文可帮助开发者更好地理解并应用这两种技术。
97 1