【JavaEE初阶】Servlet(四) Cookie Session

文章目录

  • 1. Cookie && Session
    • 1.1 Cookie && Session
    • 1.2 Servlet会话管理操作

1. Cookie && Session

1.1 Cookie && Session

  1. Cookie是什么?
    Cookie是浏览器提供的持久化存储数据的机制.
  2. Cookie从哪里来?
    Cookie从服务器返回给浏览器.
    服务器代码中由程序员决定要把什么信息保存到客户端.通过HTTP响应的Set-Cookie字段,把键值对写回去.
  3. Cookie到哪里去?
    Cookie会在后续浏览器访问服务器的时候带到请求的headler中发给服务器.
    注意的是,服务器不是只给一个客户端提供服务,是同一时间要处理多个客户端.此时服务器就可以通过cookie中的值,来识别当前客户端是谁.当前客户端的服务提供到哪个环节.
  4. Cookie存储在哪里?
    存储在浏览器(客户端)所在主机的硬盘中,浏览器会根据 域名 来分别存储.

Cookie有一个最为典型的应用:标识用户的身份信息.

在网站中有个登录功能:比如淘宝, 我们登录一次网站后, 后续再使用访问淘宝的其他页面, 是不需要再次登录的, 还有自动登录功能, 隔了一段时间再次访问淘宝网站, 我们会发现此时并不需要再次输入账号密码登录, 网站就会自动地帮我们登录.

在这里插入图片描述
针对登录操作,淘宝会查询数据库,验证用户的用户名和密码是否正确.如果正确,登录成功.
淘宝就会把当前用户的身份信息在内存中也保存一份.
同时给这个用户分配一个表示身份的序号.(可能是个整数/字符串,唯一性).我们把这个生成的唯一身份序号称为sessionId.
服务器使用像hash表这样的结构把序号作为key,身份信息作为value存储起来.服务器把生成的这些键值对称为Session(会话).
在这里插入图片描述
服务器给客户端返回的 Cookie 里面就包含 SessionId, 浏览器就会在本地将这个 Cookie 储存起来, 后续浏览器发送请求的时候就会带上这个 Cookie, 服务器收到 Cookie 中的身份序号后, 就会查询 Session 会话表, 如果存在就会可以正常访问, 不用重复的输入账号与密码, 否则就需要用户重新输入账号密码进行登录.

有时候我们会发现登录网站后隔一段时间再次登录, 会出现让我们再次输入账号密码的情况, 此时就是登录状态失效过期了, 这种情况可能是可能是客户端把 Cookie 删了, 也可能是服务器这把对应的身份信息删了.

注意理解 Cookie 和 Session 之间的区别和关联.
关联: 在网站登录功能中可以搭配使用.
区别:

  1. Cookie 是客户端的存储机制, Session 是服务器的存储机制.
  2. Cookie 里面可以存各种键值对 (还可以存除 SessionId 以外的), Session 则专门用来保存用户信息.
  3. Cookie 完全可以单独使用, 不搭配 Session (实现非登录的场景), Session 也可以不搭配 Cookie (手机 App 登录服务器, 此时也需要 Session, 但这里没有 Cookie 的概念, Cookie 和浏览器强相关的).
  4. Cookie 是 HTTP 协议中的一个部分, Session 则可以和 HTTP 无关 (TCP, WebSocket …也可以用 Session).

1.2 Servlet会话管理操作

HttpServletRequest 类中, 可以使用 getSession 来获取或者创建会话, getCookies 可以获取请求中的 Cookie 列表.

方法描述
HttpSession getSession()在服务器中获取会话. 参数如果为 true, 则当不存在会话时新建会话; 参数如果为 false, 则当不存在会话时返回 null
Cookie[] getCookies()返回一个数组, 包含客户端发送该请求的所有的 Cookie 对象. 会自动把Cookie 中的格式解析成键值对.

调用 getSession 方法所做的事情:

getSession 有一个 boolean 类型的参数, 如果参数是 true, 它有如下行为:

  1. 读取 cookie 里的 sessionId 字段.
  2. 根据 sessionld 来查询对应的 HttpSession 对象在服务器上是否存在.
  3. 如果不存在, 就创建一个新的会话, 即创建一个新的 HttpSession 对象, 并生成一个唯一的 sessionId, 会以新生成的 sessionId 作为 Key, 生成的 HttpSession 对象作为 Value, 以键值对形式储存到类似于 Hash 的结构中, 然后将 sessionId 设置到响应报文中的 set-Cookie 字段返回给浏览器.
  4. 如果存在就直接返回查询到的 HttpSession 对象.

如果参数是 false, 行为如下:

  1. 读取 cookie 里的sessionId字段.
  2. 根据sessionld来查询对应的 HttpSession 对象在服务器上是否存在.
  3. 如果不存在, 直接返回 null.
  4. 如果存在就直接返回查询到的HttpSession对象.

总之, getSession 的参数为true 时允许创建 Session 会话, 为false 时不允许创建 Session 会话.

关于HttpSession:
这个对象也可以看作是一个哈希表, 是以键值对的形式存储数据的, 并且允许程序员在对象中储存任意的键值对数据, 但是 Key 必须是 String 类型,Value 的类型是 Object, 设置就比较随意了.

方法描述
Object getAttribute(String name)查询 session 会话中指定键的键值, 查不到则返回 null.
void setAttribute(String name, Object value)绑定一个键和值到该 session 会话中
boolean isNew()判定当前是否是新创建出的会话

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/73690.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

中小企业如何做好MES管理系统实施建设

中小企业在生产制造领域面临着诸多挑战,包括提升产品竞争力、规范生产制造等。为了应对这些挑战,越来越多的中小企业开始实施MES生产管理系统。然而,由于企业规模小、资源实力不足等原因,很多企业在实施MES管理系统时存在一定的困…

opencv rtsp 硬件解码

讨论使用opencv的reader 硬件解码的方案有太多种,如果使用ffmpeg硬件解码是最方便的,不方便的是把解码过后的GPU 拉到 CPU 上,再使用opencv的Mat 从cpu 上上载到gpu上,是不是多了两个过程,应该是直接从GPU mat 直接去…

腾讯测试大佬分享4个关于 Python 函数(方法)的冷知识

关于参数标识 不知道大家在工作中有没有遇到一种情况,你的同事 A 写了一个方法给你调用,然后你调用时不知道该传什么参数,然后这个同事 A 还很 cao dan 的居然不加班!你一脸茫然的看着这个方法,当你尝试传进去一个 ab…

使用pg_prewarm缓存PostgreSQL数据库表

pg_prewarm pg_prewarm 直接利用系统缓存的代码,对操作系统发出异步prefetch请求,在应用中,尤其在OLAP的情况下,对于大表的分析等等是非常耗费查询的时间的,而即使我们使用select table的方式,这张表也并不可能将所有…

后端整理(MySql)

1 事务 1.1 事务ACID原则 原子性(Atomicity) 事务的原子性指的是事务的操作,要么全部成功,要么全部失败回滚 一致性(Consistency) 事务的一致性是指事务必须使数据库从一个一致状态转变成另一个一致性…

hugging face下载数据集

开始直接执行这个,下载下来的图片打不开 git clone https://huggingface.co/datasets/diffusers/dog-example 解决办法: 安装git lfs 1. curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo bash 2. sudo apt…

会议OA系统会议管理模块开发思路(layui搭建)

目录 一.为什么要进行开发 1.开发目的 2.项目流程 A.发起会议请求过程 1.首先实现我们的多选下拉框功能! 2.时间组件功能,并且提交我们新增加的会议内容 3.在进行发起会议编码时遇到的问题,BUG 3.1.有点时候js访问不到路径 3.2在增加…

Ctfshow web入门 JWT篇 web345-web350 详细题解 全

CTFshow JWT web345 先看题目,提示admin。 抓个包看看看。 好吧我不装了,其实我知道是JWT。直接开做。 在jwt.io转换后,发现不存在第三部分的签证,也就不需要知道密钥。 全称是JSON Web Token。 通俗地说,JWT的本质…

【知网检索】2023年金融,贸易和商业管理国际学术会议(FTBM2023)

随着经济全球化,贸易自由化的进程加快,我国经济对外开放程度不断加深,正在加快融入世界经济一体化当中。当今世界各国竞争过程中,金融、贸易以及商业形态已成为其关键与焦点竞争内容。 2023年金融、贸易和商业管理国际学术会议(F…

神经网络简单介绍

人工神经网络(artififial neural network) 简称神经网络,它是一种模仿生物神经网络结构和功能的非线性数学模型。 神经网络通过输入层接受原始特征信息,再通过隐藏层进行特征信息的加工和提取,最后通过输出层输出结果。 根据需要神经网络可以…

【1.1】Java微服务:初识微服务

✅作者简介:大家好,我是 Meteors., 向往着更加简洁高效的代码写法与编程方式,持续分享Java技术内容。 🍎个人主页:Meteors.的博客 💞当前专栏: 微服务 ✨特色专栏: 知识分享 &#x…

使用Flutter的image_picker插件实现设备的相册的访问和拍照

文章目录 需求描述Flutter插件image_picker的介绍使用步骤1、添加依赖2、导入 例子完整的代码效果 总结 需求描述 在应用开发时,我们有很多场景要使用到更换图片的功能,即将原本的图像替换设置成其他的图像,从设备的相册或相机中选择图片或拍…

word里的页码问题

封面不需要页码怎么办 一份文档写完,如果需要页码,第一页是封面,封面不需要页码怎么办? 解决:打开页眉页脚,然后把首页不同勾选上,这一页就没有页码了。 目录页与正文页码格式不同怎么办 目录…

Istio 安全 授权管理AuthorizationPolicy

这个和cka考试里面的网络策略是类似的。它是可以实现更加细颗粒度限制的。 本质其实就是设置谁可以访问,谁不可以访问。默认命名空间是没有AuthorizationPolicy---允许所有的客户端访问。 这里是没有指定应用到谁上面去,有没有指定使用哪些客户端&#…

Mybatis引出的一系列问题-Mybatis缓存机制的探究

Mybatis 使用到了两种缓存&#xff1a;本地缓存&#xff08;local cache&#xff09;和二级缓存&#xff08;second level cache&#xff09;。 一级缓存默认是开启的&#xff0c;而且不能关闭&#xff0c;MyBatis的一些关键特性&#xff08;例如通过<association>和<…

Nginx学习教程(基础篇)

目录 一、Nginx安装 二、Nginx基本使用 2.1、目录结构 conf html logs sbin 2.2、基本运行原理 2.3、nginx.conf最小配置解析 worker_processes worker_connections include mime.types default_type application/octet-stream sendfile on keepalive_timeout…

eBay逆变器UL458检测报告

逆变器是把直流电能&#xff08;电池、蓄电瓶&#xff09;转变成交流电&#xff08;一般为220V,50Hz正弦波&#xff09;。它由逆变桥、控制逻辑和滤波电路组成。逆变器是一种DC to AC的变压器&#xff0c;它其实与转化器是一种电压逆变的过程。广泛适用于办公设备&#xff0c;生…

【MYSQL】DataGrip连接linux本地mysql失败:Connection refused

防火墙需要开放3306端口 sudo ufw allow 3306 要么就把防火墙关了&#xff1a; sudo ufw disablemysql开放连接 记住你的密码 ALTER USER rootlocalhost IDENTIFIED WITH mysql_native_password by 123456;修改配置文件 sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf这个…

Vue的 hash 模式与 history 模式

为了能够在改变视图的同时&#xff0c;不向后端发出网络请求。浏览器提供了 hash 模式与 history 模式。 而 vue 中的路由器就是利用了这两种模式&#xff0c;来实现前端路由的。 路由器的 hash 模式&#xff1a; 一、在 router 目录下的 index.js 文件中&#xff0c;通过 m…

什么是搜索引擎?2023 年搜索引擎如何运作?

目录 什么是搜索引擎&#xff1f;搜索引擎的原理什么是搜索引擎爬取&#xff1f;什么是搜索引擎索引&#xff1f;什么是搜索引擎检索?什么是搜索引擎排序&#xff1f; 搜索引擎的目的是什么&#xff1f;搜索引擎如何赚钱&#xff1f;搜索引擎如何建立索引?网页抓取文本处理建…