cookie与session及其区别

一、cookie

1. 为什么需要cookie?

        web程序使用HTTP协议进行传输,而HTTP协议是无状态的协议(即对事务处理无记忆性,如果后续处理需要使用前面的信息,只能重传,导致每次连接传送的数据量增大)。cookie的出现就是为了解决这个问题,把一些信息存下来,实现每次HTTP请求自动带数据给服务器。

2. 什么是cookie?

        cookie的类型为“小型文本文件”,就是一些数据信息,是网站为了辨别用户身份,进行Session跟踪而储存在用户本地终端上的数据(通常经过加密),由用户客户端计算机暂时或永久保存的信息。

场景联想:cookie的作用

        当我们打开一个网站时,如果这个网站我们曾经登录过,那么在一段时间内,当我们再次打开这个网站时,发现就不需要再次登录了,而是直接进入了首页。例如bilibili,csdn等网站。其实就是浏览器保存了我们的cookie,里面记录了一些用户信息。

cookie的基本流程

1. 浏览器发起HTTP请求给服务器
2. 服务器进行cookie设置,即set-cookie,服务器会填充好name和value属性的值,发给浏览器
3. 浏览器存储好这个cookie
4. 浏览器之后发送的每个HTTP请求都会自动带上这个cookie,直到cookie失效
cookie就是一种存储在浏览器上的数据。

        一般情况下,cookie以键值对的形式表示。

cookie中的常用属性:

  • Name:cookie的名字

  • Value:cooke的值

  • Path:定义了Web站点上可以访问该Cookie的目录

  • Expires:cookie的过期时间,也就是有效值,cookie在这个值之前都有效

  • Size:cookie的大小

  • Domain:指定了可以访问该 Cookie 的 Web 站点或域

  • Secure:指定是否使用HTTPS安全协议发送Cookie

  • HTTPOnly:用于防止客户端脚本通过document.cookie属性访问Cookie,有助于保护Cookie不被跨站脚本攻击窃取或篡改。但是,HTTPOnly的应用仍存在局限性。


Java中cookie的常用方法:

  • new Cookie(String name, String value):创建一个Cookie对象,必须传入cookie的名字和cookie的值

  • getValue():得到cookie保存的值

  • getName():获取cookie的名字

  • setMaxAge(int expiry):设置cookie的有效期,默认为-1。这个如果设置负数,表示客服端关闭,cookie就会删除。0表示马上删除。正数表示有效时间,单位是秒。

  • setPath(String uri):设置cookie的作用域


HttpServletRequest和HttpServletResponse对Cookie进行操作的常见方法:

  • response.addCookie(Cookie cookie):将cookie给客户端进行保存
  • resquest.getCookies():得到客服端传过来的所有cookie对象

cookie的生命周期:

当浏览器客户端向服务器端发送一个请求时,服务端向浏览器发送一个Cookie然后浏览器将Cookie保存
cookie有2种存储方式,一种是会话性,一种是持久性。
  • 会话性:如果cookie为会话性,那么cookie仅会保存在客户端的内存中,当我们关闭客服端时cookie也就失效了
  • 持久性:如果cookie为持久性,那么cookie会保存在用户的硬盘中,直至生存期结束(Expires)或者用户主动将其销毁。

3. cookie存在的问题

  • 数量限制:一个浏览器能创建的 Cookie 数量最多为 300 个,并且每个不能超过 4KB;每个 Web 站点能设置的Cookie 总数不能超过 20 个。
  • 安全性不高:只要电脑被黑,cookie里的信息就会泄露。跨站点脚本攻击往往利用网站漏洞在网站页面中植入脚本代码或在网站页面引用第三方法脚本代码。在受到跨站点脚本攻击时,脚本指令将会读取当前站点的所有Cookie 内容(已不存在 Cookie 作用域限制),然后通过某种方式将 Cookie 内容提交到指定的服务器(如:AJAX)。一旦 Cookie 落入攻击者手中,它将会重现其价值。
cookie适用于对安全性要求不高,不会存储大量数据的情况。

出于安全性的需求,又出现了session会话控制机制。


二、session会话

1. 什么是会话?

在浏览器与服务器之间进行,浏览器访问服务器是会话的开始,但会话的结束比较模糊,因为关闭浏览器可能只是按错而已。

因此,不同网站给每个用户的会话都设定了时间(结束会话的时间)和唯一ID(Session ID,通常是一串无规律字符串),由服务器设置,存储在服务器上。

2. 什么是session?

使用Session的流程:
1. 浏览器发送用户名和密码给服务器,服务器验证身份,若正确则身份验证成功
2. 服务器创建一个Session ID和会话结束时间,并设置cookie。将Session ID加入到cookie中,把会话时间设置为这个cookie的有效期,并对这个cookie进行签名(如果黑客修改了Session ID,服务器也识别不了),发送给浏览器。
3. 浏览器保存这个cookie(cookie存储的不是用户名和密码,而是无规律的字符串Session ID,即使电脑被黑,安全性大大提高)
4. 浏览器之后发送的每个HTTP请求都会自动带上这个cookie,直到cookie失效,会话结束

session类似于一个Map,可以存放多个键值对,key必须是一个字符串,value是一个对象。

session常用方法

  • resquest.getSession():得到请求游览器(客户端)对应的session。如果没有,那么就创建应该新的session。如果有那么就返回对应的session
  • setAttribute(String s, Object o):在session存放属性
  • getAttribute(String s):从session中得到s所对应的属性
  • removeAttribute(String s):从session中删除s对应的属性
  • getId():得到session所对应的id
  • invalidate():使session立即无效
  • setMaxInactiveInterval(int i):设置session最大的有效时间。注意,这个有效时间是两次访问服务器所间隔的最大时间,如果超过最大的有效时间,那么这个session就失效了。

三、cookie和Session的区别

  • 数据存放位置不同:cookie保存在客户端,session保存在服务端。
  • 安全程度不同:cookie的安全性较低,考虑到安全应当使用session。
  • cookie作用于它所表示的path中(url中要包含path),范围较小。session代表客户端和服务器的一次会话过程,web页面跳转时也可以共享数据,范围是本次会话,客户端关闭也不会消失。会持续到我们设置的session生命周期结束(默认30min)
  • 使用session需要cookie的配合,由cookie携带Session ID
  • 数据存储大小不同:单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie,而session则存储于服务端,浏览器对其没有限制。cookie存放的数据量较小,session可以存储更多的信息。
  • 性能使用程度不同:session会在一定时间内保存在服务器上。当访问增多,会影响服务器的性能,考虑到减轻服务器性能方面,应当使用cookie。

参考:http://t.csdnimg.cn/992Qu

http://t.csdnimg.cn/bsOxr

Cookie、Session、Token究竟区别在哪?如何进行身份认证,保持用户登录状态?_哔哩哔哩_bilibili

http://t.csdnimg.cn/KGKor

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

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

相关文章

【VUE】Vue项目打包报告生成:让性能优化触手可及

Vue项目打包报告生成:让性能优化触手可及 Vue.js是一款流行的前端框架,开发者在使用Vue.js构建项目时,生产环境的性能优化尤为重要。为了帮助开发者分析和优化打包出来的资源,生成打包报告是一个不可或缺的步骤。本文将介绍几种在…

图深度学习(一):介绍与概念

目录 一、介绍 二、图的数据结构 三、图深度学习的基本模型 四、图深度学习的基本操作和概念 五、训练过程 六、主要应用场景 七、总结 一、介绍 图深度学习是将深度学习应用于图形数据结构的领域,它结合了图论的概念和深度学习的技术,用以处理和…

如何在浏览器Web前端在线编辑PPT幻灯片?

有时候在项目中我们会遇到需要在网页在线打开并编辑PPT文档保存到本地或者服务器指定位置,猿大师办公助手可以很方便的调用本机Office实现在网页上编辑PPT幻灯片,效果与本机Office打开PPT完全一样。 猿大师办公助手支持完整嵌入模式,也就是本…

pyskl手势/动作识别的实现与pytorch cuda环境部署保姆教程

恭喜你,找到这篇不需要翻墙就能够成功部署的方法。在国内布置这个挺麻烦的,其他帖子会出现各种问题不能完全贯通。便宜你了。。 实话5年前我用1080训练过一个基于卷积和ltsm的手势识别,实话实说感觉比现在效果好。是因为现在的注意力都在tra…

开源模型应用落地-chatglm3-6b-批量推理-入门篇(四)

一、前言 刚开始接触AI时,您可能会感到困惑,因为面对众多开源模型的选择,不知道应该选择哪个模型,也不知道如何调用最基本的模型。但是不用担心,我将陪伴您一起逐步入门,解决这些问题。 在信息时代&#xf…

Normalizing Flows

需要学的是神经网络 f f f, 用于完成从source distribution (Pz)(latent space,一般为高斯分布)到 target distribution (Px) 的映射。 Normalizing Flows 是一种强大的生成模型,它通过学习一个可逆且易于计算的转换来将复杂的概…

Maven 总结

文章目录 第一章 Maven概述第一节 为什么要学习Maven?1、从『构建』角度解释①个人开发流程②团队开发流程 2、从『依赖』角度解释①jar包的规模②jar包的来源③jar包之间的依赖关系 第二节 What?什么是Maven?第二节 什么是Maven?…

FANUC机器人单轴零点标定的具体方法(全轴零点标定不方便时可采用)

FANUC机器人单轴零点标定的具体方法(全轴零点标定不方便时可采用) 前面和大家分享了FANUC机器人进行零点标定的原因和方法,具体可参考以下链接中的内容:: FANUC机器人进行零点标定的目的和具体方法步骤详解

封装原生html的table处理方法【参数类似eltable】

直接跑html即可 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>封装原生talbe</title> </…

Centos7下docker的jenkins配置启动vue、springboot生产环境

个人记录 上篇 Centos7下docker安装jenkins / Gitee上传私有仓库 安装插件 新建任务 多分支流水线 任务名称&#xff1a;ks-springboot&#xff08;后端&#xff09;/ ks-vue3&#xff08;前端&#xff09; 分支源 增加源&#xff1a;Git gitee复制git链接 https://g…

ECMA进阶1之从0~1搭建react同构体系项目1

ECMA进阶 ES6项目实战前期介绍SSRpnpm 包管理工具package.json 项目搭建初始化配置引入encode-fe-lint 基础环境的配置修改package.jsonbabel相关tsconfig相关postcss相关补充scripts脚本webpack配置base.config.tsclient.config.tsserver.config.ts src环境server端&#xff1…

简单的车牌号识别

目录 处理流程与界面各接口编写时遇到的一些问题上传图片识别结果标签显示中文 处理流程与界面 首先点击“上传图片”按钮&#xff0c;可以选择文件夹中含有汽车车牌的图片&#xff0c;并显示在“图片框”中。 点击“检测车牌”按钮&#xff0c;会先对“图片框”中即含有汽车车…

解析数据科学,探索ChatGPT背后的奥秘

在当今这个由数据驱动和AI蓬勃发展的时代&#xff0c;数据科学作为一门融合多种学科的综合性领域&#xff0c;对于推动各行各业实现数字化转型升级起着至关重要的作用。近年来&#xff0c;大语言模型技术发展态势强劲&#xff0c;为数据科学的进步做出了巨大贡献。其中&#xf…

高效解决Visual Studio Code中文乱码问题

文章目录 问题解决步骤 问题 Visual Studio Code新建一个文件编码方式总是默认GBK&#xff0c;如果我不修改成默认UTF-8&#xff0c;那么每次运行&#xff0c;如果有中文需要输出就会乱码&#xff01; 解决步骤 之后我会持续更新&#xff0c;如果喜欢我的文章&#xff0c;请记…

OpenCV基本图像处理操作(一)——图像基本操作与形态学操作

环境配置地址 图像显示 import cv2 #opencv读取的格式是BGR import numpy as np import matplotlib.pyplot as plt#Matplotlib是RGB imgcv2.imread(cat.jpg) img_gray cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) img_gray.shape cv2.imshow("img_gray", img_gray) cv2…

基于WOA优化的CNN-LSTM-Attention的时间序列回归预测matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1卷积神经网络&#xff08;CNN&#xff09;在时间序列中的应用 4.2 长短时记忆网络&#xff08;LSTM&#xff09;处理序列依赖关系 4.3 注意力机制&#xff08;Attention&#xff09; 4…

【机器学习300问】69、为什么深层神经网络比浅层要好用?

要回答这个问题&#xff0c;首先得知道神经网络都在计算些什么东西&#xff1f;之前我在迁移学习的文章中稍有提到&#xff0c;跳转链接在下面&#xff1a; 为什么其他任务预训练的模型参数&#xff0c;可以在我这个任务上起作用&#xff1f;http://t.csdnimg.cn/FVAV8 …

Elasticsearch数据写入、检索流程及底层原理全方位解析

码到三十五 &#xff1a; 个人主页 心中有诗画&#xff0c;指尖舞代码&#xff0c;目光览世界&#xff0c;步履越千山&#xff0c;人间尽值得 ! 目录 ✍&#x1f3fb;序言✍&#x1f3fb;1️⃣✍&#x1f3fb;es的架构简介1. 分布式架构2. 索引与搜索3. 数据写入与持久化4. 缓…

C#值类型和引用类型、赋值、区别、相同点

C#值类型和引用类型 **前言&#xff1a;**在C#中变量分为以下几种类型&#xff1a;值类型&#xff08;Value Types&#xff09;,引用类型&#xff08;Reference Types&#xff09;,指针类型&#xff08;Pointer Types&#xff09;;指针类型&#xff08;变量存储另一种类型变量…

如何做信创测试

信创测试是一种系统化的方法&#xff0c;旨在评估和验证创意和创新项目的潜力和可行性。进行信创测试可以帮助企业在投入大量资源之前&#xff0c;对创意进行客观、科学的评估&#xff0c;以减少失败的风险并最大化成功的可能性。以下是一般性的信创测试步骤&#xff1a; 确定…