cookie和session的区别?一文讲透
一、问题
cookie和session的区别?
二、回答
1、总结如下
- cookie:
- cookie存储于客户端本地,即浏览器缓存
- cookie存储着sessionId,作为后台session缓存的主键,可以快速识别用户身份,减少后台请求
- 问题:数据量较小,不适合存储大数据,如有些图片很大就支撑不了
- 问题:有些服务器禁用cookie,就无法使用cookie
- 替代方案:采用HTML5的Session Storage,支持较大的数据存储
- session:
- session存储于服务器端,即web服务器缓存
- session存储着登录后用户的基本信息,以减轻数据库服务器的压力
- session后台有设置缓存失效时间,长时间不登录,后台会清除session缓存
- 服务器重启会导致session缓存数据丢失
- 问题:集群数据共享问题,如web1存用户基本信息,web2下单,从web2中无法获取到web1的用户信息
- 替代方案1:使用Redis替代session,实现分布式缓存
- 替代方案2:不使用缓存,将信息写在HTTP协议里,使用token
2、cookie与session交互示意图

如上图,当客户端用户在www.xxx.com网址下输入用户名密码,登录成功,服务器端会为admin这个用户创建一份session缓存空间,存储admin用户的基本用户信息,其主键为sessionId;
服务器端在响应的header中,将sessionId返回给客户端,客户端得到sessionId,会将其存储到本地磁盘中:名称sessionId,值1234,Domain为.xxx.com,还有过期时间等;
当用户继续操作如添加购物车,此时客户端检测到本地有.xxx.com域名的cookie,会自动在请求header中加上该cookie,值为sessionId=1234,发给服务端;
服务器端接收到请求,检测sessionId为1234在缓存区有该主键的session,从而知道用户身份是admin用户,返回成功。
3、cookie的问题及解决方案
(1)清理掉cookie导致重新登录的原因?
当我们将浏览器中的cookie清除掉以后,它会清掉本地存储的sessionId信息,这样再次访问该网站,请求头里没有携带sessionId,后台无法通过sessionId检测到你是谁,就会认为你是没登录过的用户,让你重新登录。
(2)cookie容量较小,现在有的图片很大,无法存储,且有的服务器禁用cookie,如何解决?
可以采用HTML5的Session Storage,以支持较大的数据存储。
4、session的问题及解决方案
(1)长时间不登录导致账号被踢掉的原因?
服务器端的sessionId缓存空间很小,大概只有4k,当大量用户登录,服务器需要为每个用户创建session缓存空间,就不够用对服务器来说有压力,为了解决这个问题就有了session缓存的失效时间,一般为30分钟。
长时间不登录,如超过30分钟,服务器端的session超过失效时间就会自动清掉,此时客户端拿着老的cookie里存的sessionId去访问服务器,服务器检测不到对应的session信息,即不认识你,就会让你重新登录。
(2)服务器重启导致session缓存数据丢失的原因?
因为session数据存在缓存里,又没有落在磁盘上,服务器重启缓存数据会丢失,session缓存数据自然也就没了,这是正常的特性,如同未保存的word文档打开后数据丢失一样。
(3)session真正的问题是:集群环境下的数据共享问题
现在很多后台服务器都是分布式集群环境,比如我有2台web服务器,web1缓存中存储了登录后的用户基本信息,web2下单,那么在web2服务器上想要获取web1缓存中的用户信息是获取不到的。
为了解决这个问题,目前有2种替代方案:
第一种是:利用redis缓存存储,也就是不把缓存缓在单个服务器上,而是缓在一个redis缓存数据库里,这样web1可以写redis,web2读redis,大家都操作一份缓存数据;
第二种是:利用token,也就是用户基本信息不放在缓存中,而是写到http协议里,这样web1登录完了以后,把用户信息放在token里返回,web2操作时带着token去访问,服务器也能识别到用户身份。
cookie和session的区别?一文讲透的更多相关文章
- JavaWeb之Cookie和Session的区别
Cookie和Session的区别 一.cookie机制和session机制的区别 ********************************************************** ...
- Cookie和Session的区别
前言 HTTP是一种无状态的协议,为了分辨链接是谁发起的,就需要我们自己去解决这个问题.不然有些情况下即使是同一个网站我们每打开一个页面也都要登录一下.而Session和Cookie就是为解决这个问题 ...
- cookie 和session 的区别(转)
二者的定义: 当你在浏览网站的时候,WEB 服务器会先送一小小资料放在你的计算机上,Cookie 会帮你在网站上所打的文字或是一些选择, 都纪录下来.当下次你再光临同一个网站,WEB 服务器会先看看有 ...
- Token ,Cookie和Session的区别
在做接口测试时,经常会碰到请求参数为token的类型,但是可能大部分测试人员对token,cookie,session的区别还是一知半解. Cookie cookie 是一个非常具体的东西,指的就是浏 ...
- Cookie 与 Session 的区别
Cookie与Session的区别 cookie的简介 cookie是Web服务器保存在客户端的一系列文本信息 cookie的作用 对特定对象的追踪 统计网页浏览次数 简化登录 安全性能:容易信息泄露 ...
- 理解Cookie和Session的区别及使用
资料一: Cookie和Session的区别 共同之处: cookie和session都是用来跟踪浏览器用户身份的绘画方式. 区别: cookie数据保存在客户端,session数据保存在服务端. s ...
- Token 、Cookie和Session的区别
本文转至http://blog.csdn.net/tobetheender/article/details/52485948 https://blog.csdn.net/axin66ok/articl ...
- cookie 和session 的区别详解
这些都是基础知识,不过有必要做深入了解.先简单介绍一下. 二者的定义: 当你在浏览网站的时候,WEB 服务器会先送一小小资料放在你的计算机上,Cookie 会帮你在网站上所打的文字或是一些选择, 都纪 ...
- Cookie和Session的区别详解
本文引用自:http://www.cnblogs.com/shiyangxt/archive/2008/10/07/1305506.html 二者的定义: 当你在浏览网站的时候,WEB 服务器会先送一 ...
- cookie 和session 的区别
假如我填好了淘宝的用户名密码,点击登录,浏览器客户端像服务器端发送请求,这时服务器端看这个用户是第一次登陆,session会让客户端这个浏览器生成个cookie,并给cookie一个session i ...
随机推荐
- [selenium]点击元素出现的obscure问题
前言 我们一般使用如下方式点击元素: elem = driver.find_element(...) elem.click() # 或者使用带等待条件的方式 elem = WebDriverWait( ...
- TensorRT 模型加密杂谈
在大多数项目交付场景中,经常需要对部署模型进行加密.模型加密一方面可以防止泄密,一方面可以便于模型跟踪管理,防止混淆. 由于博主使用的部署模型多为TensorRT格式,这里以TensorRT模型为例, ...
- 遥遥领先 spring,中国人的 solon 来啦!10% 的体积,10倍的速度
Solon 是什么? Java 生态型应用开发框架.它从零开始构建,有自己的标准规范与开放生态(历时五年,已有全球第二级别的生态规模).与其他框架相比,它解决了两个重要的痛点:启动慢,费内存.2023 ...
- 【opencv】传统目标检测:HOG+SVM实现行人检测
传统目标分类器主要包括Viola Jones Detector.HOG Detector.DPM Detector,本文主要介绍HOG Detector与SVM分类器的组合实现行人检测. HOG(Hi ...
- 玄 - 利用DLL通知回调函数注入shellcode(上)
序 偶然看到某国外大佬发布新技术-"Threadless"进程注入技术,据说可过EDR(确实可),总结该技术原理 - 在远程目标进程中利用DLL通知回调机制执行shellcode, ...
- 《CTFshow-Web入门》08. Web 71~80
@ 目录 web71 题解 原理 web72 题解 原理 web73 题解 web74 题解 web75 题解 原理 web76 题解 web77 题解 原理 web78 题解 原理 web79 题解 ...
- 学习JavaScript的路径
学习JavaScript的路径可以按照以下步骤进行: 了解基本概念:首先学习JavaScript的基本概念,包括变量.数据类型.运算符.数组.对象.循环和条件语句等.可以通过阅读相关的教材.在线课程或 ...
- VulnStack - ATT&CK红队评估实战(一) Writeup
VulnStack - ATT&CK红队评估实战(一) Writeup VulnStack(一)环境搭建 项目地址 http://vulnstack.qiyuanxuetang.net/vul ...
- 【python技巧】替换文件中的某几行
[python技巧]替换文件中的某几行 1. 背景描述 最近在写一个后端项目,主要的操作就是根据用户的前端数据,在后端打开项目中的代码文件,修改对应位置的参数,因为在目前的后端项目中经常使用这个操作, ...
- Java 中的日期时间总结
前言 大家好,我是 god23bin,在日常开发中,我们经常需要处理日期和时间,日期和时间可以说是一定会用到的,现在总结下 Java 中日期与时间的基本概念与一些常用的用法. 基本概念 日期(年月日, ...