【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对象并返回。

示意图如下:

相关文章
|
8天前
|
Java
死磕-java并发编程技术(二)
死磕-java并发编程技术(二)
|
8天前
|
存储 Java 调度
死磕-java并发编程技术(一)
死磕-java并发编程技术(一)
|
6天前
|
存储 缓存 数据处理
php学习笔记-php会话控制,cookie,session的使用,cookie自动登录和session 图书上传信息添加和修改例子-day07
本文介绍了PHP会话控制及Web常用的预定义变量,包括`$_REQUEST`、`$_SERVER`、`$_COOKIE`和`$_SESSION`的用法和示例。涵盖了cookie的创建、使用、删除以及session的工作原理和使用,并通过图书上传的例子演示了session在实际应用中的使用。
php学习笔记-php会话控制,cookie,session的使用,cookie自动登录和session 图书上传信息添加和修改例子-day07
|
5天前
|
传感器 监控 数据可视化
【Java】智慧工地解决方案源码和所需关键技术
智慧工地解决方案是一种新的工程全生命周期管理理念。它通过使用各种传感器、数传终端等物联网手段获取工程施工过程信息,并上传到云平台,以保障数据安全。
25 7
|
10天前
|
缓存 负载均衡 Dubbo
Dubbo技术深度解析及其在Java中的实战应用
Dubbo是一款由阿里巴巴开源的高性能、轻量级的Java分布式服务框架,它致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。
32 6
|
3天前
|
存储 安全 NoSQL
Cookie、Session、Token 解析
Cookie、Session、Token 解析
13 0
|
8天前
|
存储 JSON 数据安全/隐私保护
Cookie + Session 的时代已经过去了?
在探讨“Cookie + Session”这一经典组合是否已经过时的议题时,我们首先需要理解它们在Web应用认证和会话管理中的历史地位与当前面临的挑战。随着Web技术的飞速发展,特别是无状态服务、OAuth、JWT(JSON Web Tokens)等技术的兴起,这一传统机制确实面临了前所未有的变革压力。但说它“完全过去”或许过于绝对,因为它在特定场景下仍发挥着重要作用。
17 0
|
15天前
|
Kubernetes Cloud Native Java
探索未来编程新纪元:Quarkus带你秒建高性能Kubernetes原生Java应用,云原生时代的技术狂欢!
Quarkus 是专为 Kubernetes 设计的全栈云原生 Java 框架,凭借其轻量级、快速启动及高效执行特性,在 Java 社区脱颖而出。通过编译时优化与原生镜像支持,Quarkus 提升了应用性能,同时保持了 Java 的熟悉度与灵活性。本文将指导你从创建项目、编写 REST 控制器到构建与部署 Kubernetes 原生镜像的全过程,让你快速上手 Quarkus,体验高效开发与部署的乐趣。
13 0
|
20天前
|
存储 前端开发 Java
JavaWeb基础7——会话技术Cookie&Session
会话技术、Cookie的发送和获取、存活时间、Session钝化与活化、销毁、用户登录注册“记住我”和“验证码”案例
JavaWeb基础7——会话技术Cookie&Session
|
2月前
|
存储 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
65 1
下一篇
无影云桌面