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 {@Overrideprotected 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 {@Overrideprotected 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数组,不为空时,打印头中的名字和值信息。

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

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

相关文章

2023年北邮渣硕的暑期秋招总结

背景 实验室一般是在研究生二年级的时候会放实习,在以后的日子就是自己完成毕业工作要求,基本上不再涉及实验室的活了,目前是一月份也是开始准备暑期实习的好时间。实验室每年这个时候都会有学长学姐组织暑期实习经验分享,本着不…

[计算机提升] 创建FTP共享

4.7 创建FTP共享 4.7.1 FTP介绍 在Windows系统中,FTP共享是一种用于在网络上进行文件传输的标准协议。它可以让用户通过FTP客户端程序访问并下载或上传文件,实现文件共享。 FTP共享的用途非常广泛,例如可以让多个用户共享文件、进行文件备份…

Github 2024-01-12Java开源项目日报 Top10

根据Github Trendings的统计,今日(2024-01-12统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Java项目10Vue项目3 Apache Flink: 开源流处理框架 创建周期:3506 天开发语言:Java协…

羊驼2:开放的基础和微调聊天模型--Llama 2论文阅读

论文地址:https://arxiv.org/pdf/2307.09288.pdfd 代码地址:GitHub - facebookresearch/llama-recipes: Examples and recipes for Llama 2 model 问答 用了多少个gpu? 这篇文档中使用了3.3M GPU小时的计算,使用的硬件类型是A…

使用知行之桥EDI系统的HTTP签名身份验证

本文简要概述了如何在知行之桥EDI系统中使用 HTTP 签名身份验证,并将使用 CyberSource 作为该集成的示例。 API 概述 API 是”应用编程接口”的缩写。这听起来可能很复杂,但它的真正含义是一种允许两个不同实体相互通信的软件。自开发以来,…

K8S的dashboard使用账号密码登录

原文网址:K8S的dashboard使用账号密码登录-CSDN博客 简介 本文介绍K8S的dashboard使用账号密码登录的方法。 ----------------------------------------------------------------------------------------------- 分享Java真实高频面试题,吊打面试官&…

可运营的SSL证书在线生成系统源码,附带图文搭建教程

安装教程 运行环境 PHP8.0.2-8.2最好选用8.0 Nginx1.22.1版本 Mysql5.7 伪静态设置为Thinkphp 后台账号admin 密码123456 系统使用API申请地址:https://www.sslprogen.com/

Hive分区表实战 - 多分区字段

文章目录 一、实战概述二、实战步骤(一)创建学校数据库(二)创建省市分区的大学表(三)在本地创建数据文件1、创建四川成都学校数据文件2、创建四川泸州学校数据文件3、创建江苏南京学校数据文件4、创建江苏苏…

【RT-DETR有效改进】带你分析如何确定改进的基础模型,解决模型无法收敛精度很差的问题(ResNet官方一比一复现)

一、本文介绍 Hello,各位读者,距离第一天发RT-DETR的博客已经过去了接近两个月,这段时间里我深入的研究了一下RT-DETR在ultralytics仓库的使用,旨在为大家解决为什么用v8的仓库训练的时候模型不收敛,精度差的离谱的问…

高效降压控制器FP7132XR:为高亮度LED提供稳定可靠的电源

目录 一. FP7132概述 二. 驱动电路:FP7132 三. FP7132应用 高亮度LED作为新一代照明技术的代表,已经广泛应用于各种领域。然而,高亮度LED的工作电压较低,需要一个高效降压控制器来为其提供稳定可靠的电源。在众多降压控制器…

maya , motionbuilder 骨骼动画相关操作与脚本

文章目录 maya 解除/增加父子关系maya 修改骨骼局部坐标系mb同时打开两个动画文件显示骨骼局部坐标系删除不需要的骨骼重命名骨骼 maya 解除/增加父子关系 解触: 右键->操作->解除父子关系 增加:鼠标中键拖拽 maya 修改骨骼局部坐标系 注意一般就是改旋转&…

Alphalens因子分析(4) - Information Coefficient方法

在前面的笔记中,无论是回报分析,还是因子Alpha,它们都受到交易成本的影响。信息分析 (Information Analysis)则是一种不受这种影响的评估方法,主要研究方法就是信息系数(Information Coefficient)。 信息系数的范围为-1到1&#x…