Javaweb学习笔记5—CookieSession

2024-01-31 05:30

本文主要是介绍Javaweb学习笔记5—CookieSession,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!



前几天博客被黑了,导致博客登陆不上,把前几天应该发的东西的东西重新发一遍


今天来讲javaweb的第五阶段学习。 

CookieSession同样是web开发常用到的地方。

老规矩,首先先用一张思维导图来展现今天的博客内容。

ps:我的思维是用的xMind画的,如果你对我的思维导图感兴趣并且想看到你们跟详细的备注信息,请点击下载

另外:如果图看不清的话请右击---在新窗口中打开会清楚很多。


一、会话管理技术概述

    1 什么是会话?

         这里的会话指的是web开发中的一次通话过程,当打开浏览器,访问网站地址后,会话开始,当关闭浏览器(或者到了过期时间),会话结束。

        例如:我们去网吧上网,在吧台拿到用户名和密码,然后找机器登录,这时候机器就认识了我们,我们就可以开始上网,这就相当于我们开启了一次上网的会话,当我们点击结束下机(或者遇到关机重启),或者上网时间到了,这时候机器就不再认识我们,那么就叫会话结束。

    2 会话管理技术能做什么?

        共享同一个客户浏览器多个请求中数据,例如购物车。(简单权限过滤)

二、客户端会话管理技术(Cookie):

    1 什么是Cookie

        它是客户端浏览器的缓存文件

里面记录了客户浏览器访问网站的一些内容。

它也是Http协议请求和响应消息头的一部分。(回顾http协议)

    2 Cookie能做什么?

        能保存客户浏览器访问网站的相关内容(需要服务器开启Cookie)。从而在每次访问需要同一个内容时,先从本地缓存获取,使资源共享,并且提高效率。

        Cookie有大小,个数限制。每个网站最多只能存20cookie,且大小不能超过4kb(32bit不能超过4096MB)同时,所有网站的cookie总数不超过300个。

    3 Cookie中的属性

        属性:

            name:必要属性,cookie的名称。

            value:必要属性,cookie的值(不能是中文)

            ---------------------------可选属性---------------------------------

            path:cookie的    路径(重要)

            domain:cookie的域名(重要),相当于访问的网站(localhost

            maxAge:cookie的生存时间(相当于生命周期的活着)(比较重要),

                     当删除cookie时,设置该值为0

                     当不设置该值时,使用的是浏览器的内存,当关闭浏览器之后,cookie将丢失。设置了此值,就会保存成缓存文件(值必须是大于0,以秒为单位)。

            version:cookie的版本号。(不重要)

            comment:cookie的说明。(不重要)

    4 web应用中如何设置和获取Cookie

        定义一个Cookie

            Cookie cookie = new Cookie(cookieName,cookieValue);

        HttpServletRequest 获取 Cookie

            Cookie[] cookies = request.getCookies();

            该方法返回的是一个数组。(为什么是数组呢,方便,可以直接拿到与该请求相关的所有cookie)

        HttpServletResponse 添加Cookie

            response.addCookie(cookie);

        添加一个cookie,其实就是添加一个响应消息头

                response.setHeader("Set-Cookie","name=value;path=;maxage=;domain=");

        (为什么没有set方法,原因是set就会把之前的覆盖,所以每次都是添加)。

        如何确定一个唯一的cookiecookieName+cookiePath+cookieDomain

        定位一个cookie是由cookie的名称和路径,主机(访问的资源)三部分组成

    5 掌握Cookie的案例:

        A:使用Cookie技术获取最后访问时间(清除Cookie,设置maxAge(0));

        B:CookiePath(必须搞明白,什么时候浏览器带给服务器,什么时候不带)

        C:记录用户登录时的登录名

        D:记录浏览顺序

三、服务端会话管理技术(HttpSession):

    1、什么是HttpSession

            它是一个服务端会话对象,存储用户的会话数据。

    2、获取session的两种方式

            方式一:request:getSession();

            执行过程如下:

        方式二:request.getSession(boolean b);

        

        常用的几个方法:

            void setAttribute(String key,Object value);

            Object getAttribute(String key);

            void removeAttribute(String key);

            String getId();

        

    HttpSession的invalidate方法:作用是使session立即失效。

    设置HttpSession的过期时间,Tomcat的默认过期时间是30分钟。

    3HttpSession的生命周期

        出生——活着——死亡

        出生:调用getSession方法后会话开始

        活着:只要没有关闭会话(关闭浏览器)或者调用立即失效方法。或者服务器意外,                HttpSession一直存在

        死亡:调用立即失效方法invalidate,到了过期时间,关闭会话,服务器意外。

    4、域对象(三缺一了)

        HttpSession:也是一个域对象,它比application域范围小,比request域范围大

         

    5 、三个案例

        A 简单购物车实现

        B 防止表单重复提交

        C 完成用户登录,记录用户名和密码

    6、客户端禁用Cookie后会话数据的保持

        方式1:使用文字提示。163邮箱就是使用的这种方式。

        方式2URL重写。

                解释:当禁用了cookie之后,客户端永远都不会带Cookie到服务器。

                解决:我们自己给他带上,把URL重新写。 拼上一个JSESSIONID

                =session的ID。使用的是response.encodeURL()

                原来:http://localhost:8080/servletdemo/ServletDemo1

                重写后:http://localhost:8080/servletdemo/ServletDemo1;JSESSIONID=123

                注意:要重写必须全都重写,忘了一个,session中的数据就全部丢失。

                     因为不带cookie了,所以每次都是创建一个新的session

    7HttpSession对象的状态

        a、什么是持久态

            把长时间不用,但还不到过期时间的HttpSession进行序列化,写到磁盘上。

            我们把HttpSession持久态也叫做钝化。(与钝化想反的,我们叫活化。)

        b、什么时候使用持久化

            第一种情况:当访问量很大时,服务器会根据getLastAccessTime来进行排序,对长时间不用,但是还没到过期时间的HttpSession进行持久化。

            第二种情况:当服务器进行重启的时候,为了保持客户HttpSession中的数据,也要对HttpSession进行持久化

        d、注意:HttpSession的持久化由服务器来负责管理,我们不用关心。

                 只有实现了序列化接口的类才能被序列化,否则不行。

这篇关于Javaweb学习笔记5—CookieSession的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/662701

相关文章

深入浅出Spring中的@Autowired自动注入的工作原理及实践应用

《深入浅出Spring中的@Autowired自动注入的工作原理及实践应用》在Spring框架的学习旅程中,@Autowired无疑是一个高频出现却又让初学者头疼的注解,它看似简单,却蕴含着Sprin... 目录深入浅出Spring中的@Autowired:自动注入的奥秘什么是依赖注入?@Autowired

Spring 依赖注入与循环依赖总结

《Spring依赖注入与循环依赖总结》这篇文章给大家介绍Spring依赖注入与循环依赖总结篇,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. Spring 三级缓存解决循环依赖1. 创建UserService原始对象2. 将原始对象包装成工

Java中如何正确的停掉线程

《Java中如何正确的停掉线程》Java通过interrupt()通知线程停止而非强制,确保线程自主处理中断,避免数据损坏,线程池的shutdown()等待任务完成,shutdownNow()强制中断... 目录为什么不强制停止为什么 Java 不提供强制停止线程的能力呢?如何用interrupt停止线程s

SpringBoot请求参数传递与接收示例详解

《SpringBoot请求参数传递与接收示例详解》本文给大家介绍SpringBoot请求参数传递与接收示例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋... 目录I. 基础参数传递i.查询参数(Query Parameters)ii.路径参数(Path Va

SpringBoot路径映射配置的实现步骤

《SpringBoot路径映射配置的实现步骤》本文介绍了如何在SpringBoot项目中配置路径映射,使得除static目录外的资源可被访问,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一... 目录SpringBoot路径映射补:springboot 配置虚拟路径映射 @RequestMapp

Java MCP 的鉴权深度解析

《JavaMCP的鉴权深度解析》文章介绍JavaMCP鉴权的实现方式,指出客户端可通过queryString、header或env传递鉴权信息,服务器端支持工具单独鉴权、过滤器集中鉴权及启动时鉴权... 目录一、MCP Client 侧(负责传递,比较简单)(1)常见的 mcpServers json 配置

GSON框架下将百度天气JSON数据转JavaBean

《GSON框架下将百度天气JSON数据转JavaBean》这篇文章主要为大家详细介绍了如何在GSON框架下实现将百度天气JSON数据转JavaBean,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录前言一、百度天气jsON1、请求参数2、返回参数3、属性映射二、GSON属性映射实战1、类对象映

Web服务器-Nginx-高并发问题

《Web服务器-Nginx-高并发问题》Nginx通过事件驱动、I/O多路复用和异步非阻塞技术高效处理高并发,结合动静分离和限流策略,提升性能与稳定性... 目录前言一、架构1. 原生多进程架构2. 事件驱动模型3. IO多路复用4. 异步非阻塞 I/O5. Nginx高并发配置实战二、动静分离1. 职责2

Java Stream 并行流简介、使用与注意事项小结

《JavaStream并行流简介、使用与注意事项小结》Java8并行流基于StreamAPI,利用多核CPU提升计算密集型任务效率,但需注意线程安全、顺序不确定及线程池管理,可通过自定义线程池与C... 目录1. 并行流简介​特点:​2. 并行流的简单使用​示例:并行流的基本使用​3. 配合自定义线程池​示

从原理到实战解析Java Stream 的并行流性能优化

《从原理到实战解析JavaStream的并行流性能优化》本文给大家介绍JavaStream的并行流性能优化:从原理到实战的全攻略,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的... 目录一、并行流的核心原理与适用场景二、性能优化的核心策略1. 合理设置并行度:打破默认阈值2. 避免装箱