会话Cookie跟踪技术

news2024/11/23 4:07:19

会话

用户打开浏览器,访问web服务器的资源,会话建立,直到有一方断开连接,会话结束。在一次会话中可以包含多次请求和响应。

  • 从浏览器发出请求到服务端响应数据给前端之后,一次会话(在浏览器和服务器之间)就被建立了

  • 会话被建立后,如果浏览器或服务端都没有被关闭,则会话就会持续建立着

  • 浏览器和服务器就可以继续使用该会话进行
    请求发送和响应,上述的整个过程就被称之为会话。
    在这里插入图片描述
    在这里插入图片描述

Cookie的使用

1.发送cookie

 //发送Cookie

        //1. 创建Cookie对象
//        Cookie cookie = new Cookie("username","zs");

        String value = "张三";
        //URL编码
        value = URLEncoder.encode(value, "UTF-8");
        System.out.println("存储数据:"+value);

        Cookie cookie = new Cookie("username",value);

2.获取cookie

 //1. 获取Cookie数组
        Cookie[] cookies = request.getCookies();

        //2. 遍历数组
        for (Cookie cookie : cookies) {
            //3. 获取数据
            String name = cookie.getName();
            if("username".equals(name)){
                String value = cookie.getValue();
                //URL解码
                value = URLDecoder.decode(value,"UTF-8");


                System.out.println(name+":"+value);

                break;
            }
        }

在这里插入图片描述

Cookie原理

在这里插入图片描述
(1)访问AServlet对应的地址 http://localhost:8080/cookie-demo/aServlet
F12+回车打开开发者工具
在这里插入图片描述

Cookie使用细节

  • Cookie存活时间
    默认情况下,Cookie存储在浏览器内存中,当浏览器关闭,内存释放,则Cookie被销毁
    所以我们现在就遇到一个难题是如何将Cookie持久化存储?
    Cookie其实已经为我们提供好了对应的API来完成这件事,这个API就是setMaxAge,
    设置Cookie存活时间
setMaxAge(int seconds) 
参数值为:
1.正数:将Cookie写入浏览器所在电脑的硬盘,持久化存储。到时间自动删除
2.负数:默认值,Cookie在当前浏览器内存中,当浏览器关闭,则Cookie被销毁
3.零:删除对应Cookie
接下来,咱们就在AServlet中去设置Cookie的存活时间
  • Cookie存储中文
    Cookie不能直接存储中文
    如需要存储,则需要进行转码:URL编码
@WebServlet("/aServlet")
public class AServlet extends HttpServlet {
  @Override
//(2)在BServlet中获取值,并对值进行解码
  protected void doGet(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException {
    //发送Cookie
    String value = "张三";
    //对中文进行URL编码
    value = URLEncoder.encode(value, "UTF-8");
    System.out.println("存储数据:"+value);
    //将编码后的值存入Cookie中
    Cookie cookie = new Cookie("username",value);
    //设置存活时间  ,1周 7天
    cookie.setMaxAge(60*60*24*7);
    //2. 发送Cookie,response
    response.addCookie(cookie);
 }
  @Override
  protected void doPost(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException {
    this.doGet(request, response);
 }
}

Session

  • 服务端会话跟踪技术:将数据保存到服务端
  • JavaEE提供HttpSession接口,来实现一次会话的多次请求间数据共享功能
@WebServlet("/demo1")
public class SessionDemo1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //存储到Session中
        //1. 获取Session对象
        HttpSession session = request.getSession();
        System.out.println(session);
        //2. 存储数据
        session.setAttribute("username","zs");
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request, response);
    }
}

Cookie原理

  • Cookie的实现是基于HTTP协议
    • 响应头:set-cookie
    • 请求头:cookie
      在这里插入图片描述

Session使用细节

首先需要大家思考的问题是:
服务器重启后,Session中的数据是否还在?
要想回答这个问题,我们可以先看下下面这幅图,
在这里插入图片描述
(1)服务器端AServlet和BServlet共用的session对象应该是存储在服务器的内存中
(2)服务器重新启动后,内存中的数据应该是已经被释放,对象也应该都销毁了
所以session数据应该也已经不存在了。但是如果session不存在会引发什么问题呢?

举个例子说明下,
**

  • (1)用户把需要购买的商品添加到购物车,因为要实现同一个会话多次请求数据共享,所以假设把数据存入Session对象中
  • (2)用户正要付钱的时候接到一个电话,付钱的动作就搁浅了
  • (3)正在用户打电话的时候,购物网站因为某些原因需要重启
  • (4)重启后session数据被销毁,购物车中的商品信息也就会随之而消失
  • (5)用户想再次发起支付,就会出现问题

所以说对于session的数据,我们应该做到就算服务器重启了,也应该能把数据保存下来才对。**

Cookie与Session小结

Cookie 和 Session 都是来完成一次会话内多次请求间数据共享的。
所需两个对象放在一块,就需要思考:
Cookie和Session的区别是什么?
Cookie和Session的应用场景分别是什么?
区别:

  • 存储位置:Cookie 是将数据存储在客户端,Session 将数据存储在服务端
  • 安全性:Cookie不安全,Session安全
  • 数据大小:Cookie最大3KB,Session无大小限制
  • 存储时间:Cookie可以通过setMaxAge()长期存储,Session默认30分钟
  • 服务器性能:Cookie不占服务器资源,Session占用服务器资源

应用场景:

  • 购物车:使用Cookie来存储
  • 以登录用户的名称展示:使用Session来存储
  • 记住我功能:使用Cookie来存储
  • 验证码:使用session来存储

结论
Cookie是用来保证用户在未登录情况下的身份识别
Session是用来保存用户登录后的数据
介绍完Cookie和Session以后,具体用哪个还是需要根据具体的业务进行具体分析。

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

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

相关文章

产品设计:Material Design 学习笔记二

​5、图标 桌面图标 桌面图标尺寸是48dp X 48dp。 桌面图标建议模仿现实中的折纸效果,通过扁平色彩表现空间和光影。注意避免以下问题: ①不要给彩色元素加投影 ②层叠不要超过两层 ③折角不要放在左上角 ④带投影的元素要完整展现,不能…

Debug怎么用

文章目录前言一、打断点运行Debug二、页面重新运行功能三、回到代码看断点前言 提示:这里可以添加本文要记录的大概内容: 因为最近有个项目注册不好使,想看看哪的问题,所以用debug看看程序走到了哪 提示:以下是本篇文…

docker部署mysql初始化数据库

一、前言 在使用docker部署mysql服务时,往往需要在创建容器时新建database,在需要在创建实例的过程中希望初始化sql脚本。 mysql官方镜像支持在容器初次启动时自动执行指定的sql脚本或shell脚本(注意:只有初次启动时才能自动执行&…

【正点原子I.MX6U-MINI】通过tftp从Ubuntu中下载zImage 和设备树文件 | 从网络启动Linux系统

从网络启动linux系统的唯一目的就是为了调试!不管是为了调试linux系统还是linux下的驱动。每次修改linux系统文件或者linux下的某个驱动以后都要将其烧写到EMMC中去测试,这样太麻烦了。我们可以设置linux从网络启动,也就是将 linux 镜像文件和…

【OpenCV-Python】教程:5-3 光流

OpenCV Python Optical Flow (光流) 【目标】 了解光流的概念和用 Lucas-Kanade 算法估计光流我们将使用cv2.calcOpticalFlowPyrLK()这样的函数来跟踪视频中的特征点。们将使用cv2.calcOpticalFlowFarneback()方法创建一个密集的光流场,可以用于前景检测。 【理论…

[附源码]Python计算机毕业设计高校心理咨询管理系统Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等…

Java+SSH实验室预约系统(含源码+论文+答辩PPT等)

该项目采用技术: 后台:SpringSpringmvcHibernate 前台JqueryMy97DatePickercssjs 使用了MySQLTomcat等相关技术 项目含有源码、文档、配套开发软件、软件安装教程、项目发布教程等 本系统的用户可以分为三种:管理员、教师、学生。以下针对三种…

协同共进 | 中睿天下入会工业信息安全产业发展联盟

近日,中睿天下加入“工业信息安全产业发展联盟”,成为新一批会员单位。 工业信息安全是网络安全、国家安全的重要组成部分,涉及工业领域各个环节,涵盖工业控制系统安全、工业互联网安全、工业数据安全等各领域,直接关系到经济发展…

u盘出现fat32如何恢复文件?告诉你两种好方法

u盘由于体积小、内存大等优势,在日常生活领域应用的很多,但是使用过程中,总会遇到这样或那样的问题,比如u盘显示fat32打开啥都没有了?或者u盘出现fat32而无法访问的情况,这时如果里面有重要的数据怎么办呢&…

Activiti 工作流引擎

一、什么是工作流? 工作流:指业务过程的部分或整体在计算机应用环境下的自动化。是对工作流程及其各操作步骤之间业务规则的抽象、概括描述。在计算机中,工作流属于计算机支持的协同工作(CSCW)的一部分,后者是普遍研究…

win7无损合并分区,win7合并磁盘分区

电脑的操作系统是win7的,如果磁盘分区太小或者说磁盘分区不合理,需要对磁盘分区重新分区,其中合并磁盘分区就是解决方法之一,那么,有没有关于win7无损合并分区的操作方法呢? 一、利用Windows自带的功能来合…

Matlab|基于BP神经网络进行电力系统短期负荷预测

目录 摘要 一、电力负荷数据导入 二、输入输出数据归一化 三、建立和训练BP神经网络 四、 使用测试数据进行负荷预测 五、Matlab代码实现 摘要 使用BP神经网络实现简单的电力负荷回归预测任务。主要的步骤为:导入数据、数据归一化、建立BP神经网络、训练BP神…

熹乐科技范维肖CC:基于开源 YoMo 框架构建“全球同服”的 Realtime Metaverse Application

前言 在「RTE2022 实时互联网大会」中,熹乐科技创始人 & CEO 范维肖CC 以《基于开源 YoMo 框架构建“全球同服”的 Realtime Metaverse Application》为题进行了主题演讲。 本文内容基于演讲内容进行整理,为方便阅读略有删改。 大家好,…

chatGPT的爆火,是计算机行业这次真的“饱和”了?

近日,chatGPT这一生成式AI爆火,这款号称神仙级别的自动语言生成式AI发布短短5天内,就吸引了100万用户,在官方描述中,chatGPT是一个“可以连续回答问题、承认自己的错误、挑战不正确的前提并拒绝不适当的要求”的对话模…

【GO】 K8s 管理系统项目[API部分--Deployment]

K8s 管理系统项目[API部分–Deployment] 1. 实现接口 service/dataselector.go package serviceimport ("sort""strings""time"appsv1 "k8s.io/api/apps/v1"corev1 "k8s.io/api/core/v1" )// dataselector 用于排序,过滤…

第11讲:vue脚手架集成ElementUI

一、创建vue路由项目并添加ElementUI支持 ElementUI官方网站:ElementUI组件 创建路由项目请参考:路由开发 使用如下命令集成ElementUI npm i element-ui -S在src/main.js文件中引用ElementUI import Vue from vue import App from ./App.vue import …

创建第一个QT程序demo

双击Qt Creator 9.0.0 (Community)图标,打开软件。该图标所处位置为(如果是默认安装到C盘下面的话):C:\Qt\Tools\QtCreator\bin\qtcreator.exe 或者从开始菜单栏启动(开始菜单栏的启动图标本质上也是一个快捷方式&…

记录windows上的VSCODE 远程到linux编译代码机器上的一些问题

设置windows SSH 到linux时免密码登录的方法: 将C:\Users\Administrator.ssh\id_rsa.pub中的公钥字符串复制,追加到linux ~/.ssh/authorized_keys文件中。 问题: rootlocalhost:~/.vscode-server/bin/6261075646f055b99068d3688932416f2346d…

[附源码]Node.js计算机毕业设计服装创意定制管理系统Express

项目运行 环境配置: Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境:最好是Nodejs最新版,我…

【Redis技术探索】「底层架构原理」探索分析服务数据同步持久化机制

📚背景介绍 ✒️ Redis数据恢复的介绍 通常情况下redis的数据全部存储在内存中,数据库一旦故障发生重启数据会全部丢失,持久化功能在于能够有效地避免因进程退出造成的数据丢失问题,在下次重启时利用之前持久化的文件即可实现数据…