Session与Cookie

目录

一、Session会话技术

概念

常用方法

生命周期

有效期

场景

二、Cookie技术


一、Session会话技术

概念

浏览器和服务器之间为了实现某个功能,产生了多次请求和响应,从第一次请求开始到最后一次请求结束,这期间所有的请求和响应加起来称之为一次会话。会话要解决的最重要的问题是:如何存储产生的数据

  1. Session是javaweb提供的解决会话数据存储相关的技术
  2. Session是服务器端技术,将会话产生的数据存储在服务器端。这种技术的优点是比较安全,(相比于Cookie存储在客户端的方式要安全的多);缺点是如果存储的数据量较大的话,容易出现服务器端爆满。
  3. Session技术在服务器端为每一个客户端创建各自的session对象,用来存储该客户端会话产生的数据.
  4. 每一个客户端都使用各自对应的sessionm对象,不会造成混乱

常用方法

会话(Session)是一种在客户端和服务器之间存储和传递数据的机制。在Java中,可以使用HttpSession接口提供的方法来管理会话。

HTTPSession session = request.getSession();
session.setAttribute("name","zs");
String name = (String)session.getAttribute("name");

请求会话,设置会话属性。属性名为 "name",值是"zs",接收的时候是设定接收对象的属性名,因为返回类型是Object,所以需要强转。

session.removeAttribute("name");   //移除会话的属性名为"name"的信息

session.invalidate();              //杀死会话

生命周期

session的生命周期指的是从Servlet容器创建session对象到销毁的过程。Servlet容器会依据session对象设置的存活时间,在达到session时间后将session对象销毁。session生成后,只要用户继续访问,服务器就会更新session的最后访问时间,并维护该session。

有效期

session一般在内存中存放,内存空间本身大小就有一定的局限性,因此session需要采用一种过期删除的机制来确保session信息不会一直累积,来防止内存溢出的发生。

session的超时时间可以通过maxInactiveInterval属性来设置。

如果我们想让session失效的话,也可以当通过调用session的invalidate()来完成。

场景

比如用户A在浏览器注册界面点击验证码刷新,服务器端会传回验证码值,如果后端使用的技术不是Session而是直接采用的是web应用域(全局域),假设此时同时有个用户B也在刷新验证码,A请求返回的验证码值就会被B的请求值覆盖;而会话技术在一次完整的会话结束之前,不会被其它人覆盖。

二、Cookie技术

1、Cookie是javaweb提供的解决会话数据的存储相关技术

2 、Cookie是客户端技术,将会话产生的数据存储在客户端

3、 Cookie基于set-Cookie响应头,和Cookie请求头工作.

4 、当服务器需要保存相关会话数据时,通过set-Cookie响应头命令浏览器保存指定数据,浏览器收到这个命令后就会将数据保存在浏览器的Cookie中.

5 、之后当再次去访问服务器时,浏览器通过Cookie请求头将保存的数据再次带回服务器端,服务器可以从中获取数据.

6、 每一个浏览器各自保存各自的Cookie信息,保证数据不混乱

      客户端                                                                服务器端

在BuySerevlet类下:

public class BuyServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String prod = request.getParameter("prod");
        response.setHeader("set-Cookie","prod="+prod);
    }

在PayServlet类下:

public class PayServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println(request.getHeader("Cookie"));
    }

从客户端设置数据prod,通过set-Cookie响应头命令浏览器保存prod数据,浏览器收到这个命令后就会将数据保存在浏览器的Cookie中.

之后当再次去访问服务器时,浏览器通过Cookie请求头将保存的数据再次带回服务器端,服务器可以从中获取数据.

虽然Cookie是通过setHeader设置响应头来进行操作的,但是实际项目中由Cookie API提供相关方法来保存数据。

先new出Cookie对象:

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Cookie c1 = new Cookie("name","zs");
        c1.setMaxAge(60*60*24);
        c1.setPath(request.getContextPath()+"/");
        response.addCookie(c1);
    }

setMaxAge()是设置cookie保存数据在浏览器的留存时间(s为单位)

setPath()是设置cookie路径,在设置的路径下(包括其子路径),都会获得请求头信息。

addCookie()是通过set-Cookie响应头命令浏览器保存数据,浏览器通过Cookie请求头将保存的数据再次带回服务器端接收:request.getCookies();

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Cookie[] cookies = request.getCookies();
        if(cookies != null){
            for(Cookie c : cookies){
                System.out.println(c.getName()+":"+c.getValue());
            }
        }
    }

接收返回类型是Cookie数组,不为空时,打印头中的名字和值信息。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

走进Docker的世界

文章目录 前言一、Docker相关概述1、什么是docker?2、为什么出现docker?2.1 容器与kvm虚拟化的对比2.2 docker的作用 二、安装docker及配置文件调整1.配置宿主机网卡转发2.yum安装docker3.修改daemon.json文件4.修改docker镜像和容器的默认存储路径5.启动…

高效构建Java应用:Maven入门和进阶(四)

高效构建Java应用:Maven入门和进阶(四) 四. Maven聚合和继承特性4.1 Maven工程继承关系4.2 Maven工程聚合关系 四. Maven聚合和继承特性 4.1 Maven工程继承关系 继承概念 Maven 继承是指在 Maven 的项目中,让一个项目从另一个项目…

GLES学习笔记---立方体贴图(一张图)

一、首先看一张效果图 立方体贴图 二、纹理坐标划分 如上图是一张2D纹理,我们需要将这个2D纹理贴到立方体上,立方体有6个面,所以上面的2D图分成了6个面,共有14个纹理坐标 三、立方体 上边的立方体一共8个顶点坐标,范围…

Redis(四)事务

文章目录 事务Redis事务 vs 数据库事务常用命令总结 事务 一个队列中、一次性、顺序性、排他性执行一系列命令 官网https://redis.io/docs/interact/transactions/ Redis事务 vs 数据库事务 概述详述1、单独的隔离操作Redis的事务仅仅是保证事务里的操作会被连续独占的执行&a…

2022 年全国职业院校技能大赛高职组云计算赛项试卷

【赛程名称】云计算赛项第一场-私有云 某企业拟使用OpenStack 搭建一个企业云平台,以实现资源池化弹性管理、企业应用集中管理、统一安全认证和授权等管理。 系统架构如图 1 所示,IP 地址规划如表 1 所示。 图 1 系统架构图 表 1 IP 地址规划 设备…

Java零基础教学文档第四篇:HTML_CSS_JavaScript(2)

【HTML】 【主要内容】WEB: 1.Web前端简介 2.创建第一个前端项目 3.相关标签详解 4.表格标签详解 5.表单标签详解 6.框架和实体字符 【学习目标】 1. Web前端简介 1.1 为什么要学习Web前端&#…

【Python机器学习】SVM——预处理数据

为了解决特征特征数量级差异过大,导致的模型过拟合问题,有一种方法就是对每个特征进行缩放,使其大致处于同一范围。核SVM常用的缩放方法是将所有的特征缩放到0和1之间。 “人工”处理方法: import matplotlib.pyplot as plt from…

Java异常处理之旅:解救迷失的程序员

目录​​​​​​​ 一、前言 二、基础知识 2.1 异常的概念 ​​​​​​2.2 异常分类 2.3 异常处理的原则 ​​​​​​三、异常处理的语法 3.1 try-catch语句 3.2 finally语句 3.3 throw语句 3.4 throws关键字 3.5 自定义异常 四、常见异常及处理方式 4.1 NullP…

【C语言】linux内核set_task_stack_end_magic函数

一、函数定义 void set_task_stack_end_magic(struct task_struct *tsk) {unsigned long *stackend;stackend end_of_stack(tsk);*stackend STACK_END_MAGIC; /* for overflow detection */ } 内核版本6.4.3、6.7。 二、代码解读 解读1 这段代码是一个在Linux内核中定…

芯课堂 | 固件升级方法及架构

本次介绍一种固件升级方法及架构。 所述方法通过运行引导加载程序,并基于引导加载程序,获取启动引导标志位; 在启动引导标志位为预设枚举标志位时,执行对应启动引导标志位的固件升级动作; 在启动引导标志位为非预设…

Cesium 模型压平

最近整理了下手上的代码,以下是对模型压平的说明。 原理是使用了customShader来重新设置了模型的着色器,通过修改模型顶点的坐标来实现了压平。 废话不多说,下面上代码: /*** class* description 3dtiles模型压平*/ class Flat…

leetcode 每日一题 2024年01月11日 构造有效字符串的最少插入数

题目 2645. 构造有效字符串的最少插入数 给你一个字符串 word ,你可以向其中任何位置插入 “a”、“b” 或 “c” 任意次,返回使 word 有效 需要插入的最少字母数。 如果字符串可以由 “abc” 串联多次得到,则认为该字符串 有效 。 示例 …

辞旧岁,赢新篇,创维汽车召开年度会议立足过去,展望未来

为辞旧迎新,再创辉煌,创维汽车于1月4日-5日召开了事业部年度会议。本次会议将23年整体运营情况作出总结并对新一年的发展作出了目标规划。创维集团、创维汽车创始人黄宏生先生,开沃新能源汽车集团执行董事兼首席运营官诸萍女士,创…

记录一次华为云服务器扩容系统磁盘

转载说明:如果您喜欢这篇文章并打算转载它,请私信作者取得授权。感谢您喜爱本文,请文明转载,谢谢。 1. 扩容步骤 1.1 在华为云控制台操作磁盘扩容 1.2 服务器上操作扩容步骤 1)fdisk -l 查看扩容情况,确认…

git: Updates were rejected because the tip of your current branch is behind

一、报错含义 由于本地分支的tip落后远程分支,push操作被拒绝。 二、产生原因 我再本地拉去了新的分支并未同步到远程仓库,在新分支进行开发,由于前几天同步也创建了该分支并同步到了远程仓库,导致我本次push失败 三、解决方…

【CSS】首个字符占用多行,并自定义样式

效果 代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>首字母大写</title><style&…

C++力扣题目111--二叉树的最小深度

力扣题目链接(opens new window) 给定一个二叉树&#xff0c;找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 说明: 叶子节点是指没有子节点的节点。 示例: 给定二叉树 [3,9,20,null,null,15,7], 返回它的最小深度 2 思路 看完了这篇104.二…

原生微信小程序-两次设置支付密码校验,密码设置二次确认

效果 具体代码 1、wxml <view style"{{themeColor}}"><view classcontainer><view class"password_content"><view wx:if{{type 1}}><view class"title"><view class"main_title">设置支付密码…

【Android开发】不同Activity之间的数据回传实例(一)摘桃子游戏

一、功能介绍 该项目实现的功能主要有&#xff1a; 在首页显示一个按钮点击该按钮跳转到桃园页面在桃园页面&#xff0c;点击桃子会弹窗显示摘到几个桃子&#xff0c;同时被点击桃子消失&#xff0c;总桃子数1点击退出桃园会返回首页&#xff0c;首页桃子数会根据点击的桃子数…

PPT插件-大珩助手-《提取选中的幻灯片》-选中新建

选中新建 提取选中的幻灯片到新的幻灯文稿中。PDF编辑器可以提取指定的页面到新的PDF文档中&#xff0c;PPT没有这个功能&#xff0c;因此开发。 软件介绍 PPT大珩助手是一款全新设计的Office PPT插件&#xff0c;它是一款功能强大且实用的PPT辅助工具&#xff0c;支持Wps Wo…