【Javaweb】会话跟踪技术CookieSession

news2025/1/24 8:33:52

学习目录

  • 前言
    • 一.会话引入
    • 二.Cookie
      • 1.Cookie的理解
      • 2.Cookie生命周期
      • 3.Cookie有效路径
      • 4.Cookie使用细节
    • 三.Session
      • 1.Session基本原理
      • 2.Session的理解
      • 3.Session基本使用
      • 4.Session底层
      • 5.Session生命周期

前言

纸上得来终觉浅,绝知此事要躬行

一.会话引入

什么是会话?
会话用来识别不同的客户端,客户端和服务器之间发生的一系列连续的请求和响应的过程,当我们打开浏览器,点击多个链接,访问服务器多个web资源,然后关闭浏览器结束浏览,整个过程称之为一个会话
可以说在上网的过程中无时无刻发生着会话
我们使用浏览器与服务器进行会话的过程中,各自都会产生一些数据,服务器要想办法为每个用户保存这些数据,比如登录信息,购买记录等…要实现上述目的,完善用户体验于是引出了会话的两种技术 ——Cookie&Session

二.Cookie

1.Cookie的理解

客户端会话跟踪技术
在清理浏览器垃圾的时候,经常有这样一个选项
在这里插入图片描述
这个Cookie里到底是存放的什么?需要单独列出一个选项
Cookie是服务器在客户端保存用户的信息,比如登录名,浏览历史等, 就可以以cookie方式保存
Cookie是客户端技术,服务器把每个用户的数据以cookie的形式写给用户各自的浏览器,当用户使用浏览器再去访问服务器中的web资源时,就会带着各自的数据去。这样,web资源处理的就是用户各自的数据了
在这里插入图片描述
实现原理:
Cookie的实现是基于http协议,响应头:set-cookie,请求头:cookie
浏览器会一次性地将当前域名下的所有的Cookie都携带到对应的资源里去,我们需要时就直接获取对应键的名称就可以得到
Cookie 信息的数据量并不大,服务器端在需要的时候可以从客户端/浏览器读取(http 协议)就像这样:
在这里插入图片描述
发送Cookie到服务器中:

@WebServlet("/A")
public class Servlet01 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        Cookie cookie = new Cookie("name", "lyy"); //创建对象
        resp.addCookie(cookie);  //放到浏览器里啦
  }

保存于浏览器内存中的Cookie
在这里插入图片描述
再次使用浏览器获取先前的Cookie:

@WebServlet("/B")
public class Servlet02 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        Cookie[] cookies = req.getCookies();  //存到数组里
        for (Cookie cookie : cookies) { //遍历
            //获取数据
            String name = cookie.getName();
            String value = cookie.getValue();
            System.out.println(name + " " + value);
            break;
}

当我们重新使用一个Servlet来访问浏览器时,我们得到了先前Cookie对象里的内容:
在这里插入图片描述
这样,我们就实现了在一次会话的两次请求之间共享了数据

2.Cookie生命周期

默认情况下:
Cookie存储在浏览器内存中,当关闭浏览器内存释放,他自动销毁,所谓的无痕浏览就是这样
非默认情况下:
1… setMaxAge(int seconds)设置Cookie存活时间

  Cookie cookie = new Cookie("name", "lyy");
  cookie.setMaxAge(60*60*24*7);  //设置存活时间为一周

发送到服务器后通过浏览器查看Cookie详细信息发现生命周期刚好一周:
在这里插入图片描述
2… 正数,表示在指定的秒数后过期
3… 负数,表示浏览器关闭,Cookie 就会被删除(默认值是-1)
4… 0,表示马上删除Cookie
注意:Cookie不能直接存储中文,要通过转码
(URL编码,encode()/decode())

3.Cookie有效路径

1.Cookie 有效路径 Path 的设置
2.Cookie的Path属性可以有效的过滤哪些Cookie可以发送给服务器,哪些不发( Path 属性是通过请求的地址来进行有效的过滤 )
3.规则如下:
cookieA.setPath = /demo
cookieB.setPath = /demo/123

当请求地址为: http://localhost/demo/资源
cookieA发给服务器而cookieB不会发给服务器
当请求地址为: http://localhost/demo/123/资源
cookieA发给服务器cookieB发给服务器

4.Cookie使用细节

1.一个 Cookie 只能标识一种信息,它至少含有一个标识该信息的名称(name)和设置值(value)且都是String类型
在这里插入图片描述
2.一个 WEB站点可以给一个浏览器发送多个 Cookie,一个浏览器也可以存储多个 WEB 站点提供的Cookie
3.cookie的总数量没有限制,但是每个域名的Cookie数量和每个Cookie的大小是有限制的 (不同的浏览器限制不同),Cookie不适合存放数据量大的信息
4.注意,删除cookie时,path必须一致,否则不会删除成功,要对号入座

三.Session

服务端会话跟踪技术
不同的用户登录网站后,不管该用户浏览该网站的哪个页面,都可显示登录人的名字, 还可以随时去查看自己的购物车中的商品
简言之,一个用户在浏览网站不同页面时,通过Session,服务器可以知道是哪个用户在访问该页面并且做出回馈,Session是基于Cookie实现的

1.Session基本原理

1.Session 是服务器端技术,服务器在运行时为每一个用户的浏览器创建一个其独享的 session 对象/集合
2.由于 session 为各个用户浏览器独享,所以用户在访问服务器的不同页面时,可以从各自 的 session 中读取/添加数据, 从而完成相应任务
在这里插入图片描述
3.当用户打开浏览器,访问某个网站, 操作session时服务器就会在内存(在服务端)为该浏览器分配一个session 对象,该session对象被这个浏览器独占

2.Session的理解

Session可以做什么
1.网上商城中的购物车
2.保存登录用户的信息
3.将数据放入到 Session 中,供用户在访问不同页面时,实现跨页面访问数据
4.防止用户非法登录到某个页面
可以把session看作是一容器类似Map双列集合,有两列(K-V),每一行就是session的一 个属性,每个属性包含有两个部分:
一个是该属性的名字(String),另外一个是它的值(Object)
在这里插入图片描述

3.Session基本使用

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

4.Session底层

为什么说Session是基于Cookie实现的,一张图给你安排的明明白白!
在这里插入图片描述

5.Session生命周期

Session不能长时间保存数据,浏览器关闭后获取的就不是同一个Session
但是在服务器里就不一样
Session的钝化、活化:
服务器重启后,Session中的数据是否还在?
钝化:在服务器正常关闭后,Tomcat会自动将Session数据写入硬盘的文件中
活化:再次启动服务器后,从文件中加载数据到Session中
1.setMaxInactiveInterval(int interval)设置Session的超时时间(以秒为单位),超过指定的时长,Session 就会被销毁
2.值为正数的时候,设定Session的超时时长,负数则表示永不超时
4.getMaxInactiveInterval()获取Session的超时时间
5.invalidate() 让当前 Session 会话立即无效
6. 如果没有调用 setMaxInactiveInterval() 来指定 Session 的生命时长,Tomcat会以 Session 默认时长为准,Session 默认的超时为 30 分钟,可以在 tomcat的web.xml 设置

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

7.Session 的生命周期指的是 :
客户端/浏览器两次请求最大间隔时长,而不是累积时长。即当客户端访问了自己的 session,session 的生命周期将从 0 开始重新计算。(同一个会话两次请求之间的间隔时间)
8.底层: Tomcat 用一个线程来轮询会话状态,如果某个会话的空闲时间超过设定的最大值, 则将该会话销毁
有一说一,Java是真牛啊

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

“Property or method “***“ is not defined on the instance but referenced during render.”报错的原因及解决方案

报错问题&#xff1a; 在使用vue-cli运行项目的过程中&#xff0c;在VScode中不报错&#xff0c;但在浏览器调试工具中发出 [Vue warn]: Property or method "******" is not defined on the instance but referenced during render. Make sure that this propert…

vue-day01 使用cdn引入使用

vue-day01vue?vue简明例子模板语法1. 使用{{}} Mustache语法将数据绑定到对应的实例2.使用 v-once指令3.v-html指令4.v-bind指令和v-on指令5.动态参数&#xff0c;修饰符&#xff0c;指令缩写动态参数修饰符指令缩写vue? Vue 是一套用于构建用户界面的渐进式框架。与其它大型…

前端不使用 i18n,如何优雅的实现多语言?

前言&#xff1a; 关于ERP管理系统的多语言&#xff0c;或者其他应用的多语言一直是我们比较麻烦的问题&#xff0c;大部分是使用 i18n 在代码里进行配置&#xff0c;如果想要修改语言就要自己去改代码&#xff01; 今天我们分享一下如何不使用 i18n 去实现多语言&#xff0c;用…

web前端面试高频考点——Vue的基本使用(一文掌握Vue最基础的知识点)

系列文章目录 内容参考链接Vue基本使用Vue的基本使用&#xff08;一文掌握Vue最基础的知识点&#xff09;Vue通信和高级特性Vue组件间的通信及高级特性&#xff08;多种组件间的通信、自定义v-model、nextTick、插槽&#xff09;Vue高级特性Vue的高级特性&#xff08;动态组件…

ES6遍历方法,forEach、for...in,for..of

前言 js中遍历方法很多&#xff0c;在ES6新特性中出现了很多新的遍历方法&#xff0c;使遍历数组和对象更加方便&#xff0c;下面开始列举各种方法。 1.遍历对象 1.1.for…in…循环遍历对象自身和继承的可枚举的属性&#xff08;不包括Symbol&#xff0c;因为symbol的实例是…

微信小程序开发入门与实战(数据、事件、条件)

作者 : SYFStrive 博客首页 : HomePage &#x1f4dc;&#xff1a; 微信小程序 &#x1f4cc;&#xff1a;个人社区&#xff08;欢迎大佬们加入&#xff09; &#x1f449;&#xff1a;社区链接&#x1f517; &#x1f4cc;&#xff1a;觉得文章不错可以点点关注 &#x1f4…

layui 的数据表单的defaultToolbar参数中筛选列,图标,打印,三个功能,调用单独拿出使用

项目场景&#xff1a; 参数之defaultToolbar&#xff1a; 在使用layui开发的过程中&#xff0c;常常会用到 数据表单 这一关键模块&#xff0c;在这里讲一下defaultToolbar:[filter,exports print]-------“头部工具栏右侧图标”&#xff0c;如何将这三个按钮调用出来&#x…

【vscode】vscode常用插件介绍

1、Angular Snippets&#xff08;angular片段&#xff09; 这个扩展为 TypeScript 和 HTML 添加了 Angular 的代码片段。 2、Auto Close Tag&#xff08;自动闭合标签&#xff09; 自动添加 HTML/XML 关闭标记。 3、Auto Rename Tag&#xff08;自动重命名标签&#xff09; 自…

Three.js基础入门系列(九)--导入3D模型

先来学习今天的知识——Three.js导入3D模型 复杂的3D模型&#xff08;比如制作一个飞机模型&#xff09;一般都是用第三方建模工具生成&#xff0c;然后加载到Three.js中。 01 常用建模制作工具 3Dmax 链接地址&#xff1a;https://www.autodesk.com.cn/products/3ds-max/over…

启动vue-element-admin 安装npm install报错npm ERR! code 128npm ERR! An unknown git error occurre

使用vue-element-admin前端项目&#xff0c;前提是有nodejs环境&#xff0c;对于此环境的安装可以参考网上的博客。此博客用于记录启动项目以及遇到的问题、并解决问题的过程。1、介绍vue-element-admin是基于element-ui 的一套后台管理系统集成方案 。功能&#xff1a;https:/…

Vue基础教程(下篇)

&#x1f60a;作者简介&#xff1a;大家好&#xff0c;我是是你的大头呢&#xff0c;一名大三学生&#xff0c;考研备考中。让我们一起加油&#xff0c;一起努力&#xff01; &#x1f9d1;‍&#x1f4bb;博客主页&#xff1a;是你的大头呢 &#x1f970;欢迎关注&#x1f38a…

javascript 中搜索数组的四种方法

前端经常要通过 javaScript 来处理数组中的数据&#xff0c;其中就包括检查数组中是否包含满足特定搜索条件的单个或者多个值&#xff0c;这就需要我们关于用于确认的布尔值、数组中值得位置索引或包含所有搜索结果的单独数组等。 在 ECMAScript6 之前&#xff0c;最常用的方法…

Vue中 this.$set的用法

一、this.$set能够实现什么功能 官方解释&#xff1a;向响应式对象中添加一个属性&#xff0c;并确保这个新属性同样是响应式的&#xff0c;且触发视图更新。它必须用于向响应式对象上添加新属性&#xff0c;因为 Vue无法探测普通的新增属性 (比如 this.myObject.newProperty …

pdf在线预览 pdf.js的使用

1.官网&#xff1a;https://mozilla.github.io/pdf.js/ 2、使用方法 1&#xff09; 通过官网&#xff0c;下载pdfJs插件包&#xff0c;放至项目中&#xff1b; window.open("./js/pdfJS/web/viewer.html?fileAngularJS权威指南.pdf" );2&#xff09;将下载的pdfJS…

uniapp封装axios?大可不必那么麻烦。

最近群里的一个小明同学问 uniapp可以使用axios请求吗&#xff1f;我当时就一愣 反问为什么要使用axios&#xff0c;是 uni.request 不香了吗&#xff1f; 小明&#xff1a;因为axios可以像vue的项目一样&#xff0c;在request里面封装巴拉巴拉一堆。 我&#xff1a;那uni.re…

微信小程序开发使用onreachBottom实现页面触底加载及分页

目录 一 简要介绍一下onreachBottom事件 二 实例展示 三 遇到的一些问题 一 简要介绍一下onreachBottom事件 onreachBottom和onLoad以及onShow一样&#xff0c;都属于小程序的生命周期事件&#xff0c;作用就是在页面下拉到底部时触发这个事件&#xff0c;一般适用于数据比较…

一次跨域的坑Faild to load response data: No resourse with given identifier found

有一个导出接口&#xff0c;前后端都没有动过&#xff0c;之前也测试过没有问题。上到测试环境后&#xff0c;测试环境加了证书&#xff0c;报错了。 先是后端小朋友和我说了这个问题&#xff1a; 浏览器控制台打印信息(聊天记录中那张图)&#xff1a;然后我问他操作了哪个页面…

vue3.0教程——搭建Vue脚手架【简化版】

目录 哈喽&#xff0c;大家好丫&#xff0c;你们的小郭子又来啦 ~ 一、环境要求 &#xff08;1&#xff09;node安装&#xff08;前端开发环境&#xff09; &#xff08;2&#xff09;vue-cli脚手架安装 二、安装依赖 &#xff08;1&#xff09;使用命令行安装以下依赖 &a…

Vue 之 vue-seamless-scroll 实现简单自动无缝滚动,且添加对应点击事件的简单整理

Vue 之 vue-seamless-scroll 实现简单自动无缝滚动&#xff0c;且添加对应点击事件的简单整理 目录 Vue 之 vue-seamless-scroll 实现简单自动无缝滚动&#xff0c;且添加对应点击事件的简单整理 一、简单介绍 二、安装和使用 三、效果图 四、vue-seamless-scroll 点击事件…

(网页开发/前端)配置VsCode,让您拥有更舒适的开发环境

vscode&#xff0c;微软旗下的一款强大的IDE集成开发环境&#xff0c;现在&#xff0c;越来越多的网页开发人员选择使用vscode来敲代码。 但是&#xff0c;在不添加任何扩展的vscode中&#xff0c;想要享受“丝滑”的开发体验是比较困难的。所以&#xff0c;接下来&#xff0c;…