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.hqwc.cn/news/621097.html

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

相关文章

AI预测福彩3D第34弹【2024年4月13日预测--第8套算法开始计算第2次测试】

各位小伙伴,今天实在抱歉,周末回了趟老家,回来比较晚了,数据今天上午跑完后就回老家了,晚上8点多才回来,赶紧把预测结果发出来吧,虽然有点晚了,但是咱们前面说过了,目前的…

【团体程序设计天梯赛 往年关键真题 25分题合集 详细分析完整AC代码】(L2-025 - L2-048)搞懂了赛场上拿下这些分就稳了

L2-025 分而治之 并查集 样例 输入样例: 10 11 8 7 6 8 4 5 8 4 8 1 1 2 1 4 9 8 9 1 1 10 2 4 5 4 10 3 8 4 6 6 1 7 5 4 9 3 1 8 4 2 2 8 7 9 8 7 6 5 4 2输出样例: NO YES YES NO NO分析: 先将所有边记录下来,再每次询问时&…

针对MaxCompute优化案例分享

声明 原文来源:微信公众号:阿里云开发者 前言 MaxCompute 是阿里巴巴集团推出的一种大数据计算平台,用于处理海量数据和进行数据分析。它提供了高可靠性、高扩展性和高性能的数据处理能力,支持 SQL 查询、MapReduce 计算和机器…

python|reset_index

reset_index可以重置索引index,比如说将A、B、C删除一列后,重置成数字。

外卖点餐APP开发需要哪些功能

uni-app框架:使用Vue.js开发跨平台应用的前端框架,编写一套代码,可编译到Android、小程序等平台。 框架支持:springboot/Ssm/thinkphp/django/flask/express均支持 前端开发:vue.js 可选语言:pythonjavanode.jsphp均支持 运行软件…

纯css实现switch开关

代码比较简单&#xff0c;有需要直接在下边粘贴使用吧~ html: <div class"switch-box"><input id"switch" type"checkbox"><label></label></div> css&#xff1a; .switch-box {position: relative;height: 25px…

探索以太坊世界:使用Geth打造你的私人网络

文章目录 概要名词解释Geth&#xff08;Go Ethereum&#xff09;区块链网络种类 具体流程下载geth客户端配置私链新建创世区块启动私链 连接MetaMask钱包小结 概要 在区块链领域&#xff0c;以太坊私链的搭建是学习和开发智能合约的重要一步。私链允许开发者在独立的环境中进行…

【vue】用vite创建vue项目

前置要求 要有Node.js 1. 用vite创建vue项目 在cmd中&#xff0c;进入一个文件夹 在文件资源管理器上面的文件目录中&#xff0c;输入cmd&#xff0c;回车在cmd中通过cd命令进入对应文件夹 创建项目 npm create vitelatest # 创建项目创建项目过程中的一些选项 Ok to pro…

pnpm 使用 workspace 报错 ERR_INVALID_THIS

有时候真的感觉如果有一个老师指路&#xff0c;那么遇到的坑真的会少很多。 错误示例&#xff1a; GET https://registry.npmjs.org/rollup%2Fplugin-typescript error (ERR_INVALID_THIS). Will retry in 10 seconds. 2 retries left.原因是什么&#xff1f;原因就是 pnpm 的…

Python数据容器(一)

一.数据容器入门 1.Python中的数据容器&#xff1a;一种可以容纳多份数据的数据类型&#xff0c;容纳的每一份数据称之为1个元素&#xff0c;每一个元素&#xff0c;可以是任意类型的数据&#xff0c;如字符串、数字、布尔等。 2.数据容器根据特点的不同&#xff0c;如&#…

Python基于flask的豆瓣电影分析可视化系统

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

spring02:DI(依赖注入)

spring02&#xff1a;DI&#xff08;依赖注入&#xff09; 文章目录 spring02&#xff1a;DI&#xff08;依赖注入&#xff09;前言&#xff1a;一、构造器注入&#xff08;constructor&#xff09;二、set注入&#xff1a;分析&#xff1a; 1. Student类&#xff1a;2. Addres…