cookie与session的区别

首先,使用cookie和session的目的都是为了跟踪记录用户状态,因为http协议是无状态的协议,而某些场景服务端需要记录用户的状态,如购物车,需要来识别具体的用户,服务端就为特定的用户创建特定的session,用于标识并跟踪用户;

其次,cookie和session都是会话技术,session保存在服务端,cookie保存在客户端,服务端无法知道请求对应哪个session,依靠cookie来实现session的跟踪。

所以在跟踪用户方面,cookie与session属于互相配合的关系。浏览器第一次访问服务器会创建一个session对象,通过cookie返回到浏览器(服务端会在响应头里面添加一个Set-Cookie选项,浏览器收到这类响应后通常会保存下Cookie,用于标识用户)。

在使用限制方面,cookie可以在有效期内(setMaxAge()设置有效期或者默认关闭浏览器后就失效)保存信息,但是有大小限制(约5kB)以及浏览器对cookie的存储有个数限制(每个域名可能30、50个),如果个数过多,会使header大小超过服务器的处理限制;而session本身没有大小限制,但是和服务器的内存大小有关,session保存在服务端上存在一段时间才会消失,所以session过多会增加服务器的压力。

在安全方面,cookie有安全隐患,通过拦截得到cookie后可以进行攻击。

session可以认为是一个抽象概念,开发者为了实现中断和继续等操作,将user agent和server之间一对一的交互,抽象为“会话”,进而衍生出“会话状态”,也就是session的概念。而cookie是一个实际存在的东西,http协议中定义在header中的字段,可以认为是session的一种后端无状态实现。

在使用方面,cookie除了可以跟踪会话,也可以保存用户喜好或者保存用户名密码等等,所以可以说cookie的用途更广泛。

cookie和localStorage的区别

第一,两者使用的出发目的不同,cookie最早是为了跟踪记录用户状态,用于客户端和服务端的信息传递,而localStorage的使用目的是为了在客户端存储一些简单的数据。

第二,两者的大小限制不同,cookie的限制比较小,大约是5kB,超过单个域名限制后,再设置cookie,浏览器会清除以前设置的cookie,而localStorage存储的大小就相对较大,业界主流是5MB。

第三,两者的存储期限不同,localStorage理论上来说永久有效,即不主动清空的话就不会消失,但移动设备的浏览器或者WebView中,可能会因为各种原因(退出app、网络切换、内存不足等原因)被清空;cookie就比较灵活,可以设置失效日期expires(GMT格式的时间),如果没有设置expires,这样的cookie称为会话cookie,它存在内存中,当会话结束,也就是浏览器关闭时,该cookie就消失。

第四,网络传输方面,每次HTTP请求,会自动将同域名的cookie添加到request header的cookie字段发送至服务器,但是可以设置Secure选项使cookie只在确保安全的请求中发送,所以如果cookie内容太多,会增加网络开销;localStorage的内容则不会被带上。

第五,浏览器支持情况方面,IE7及以下版本不支持web storage,cookie兼容性比较好。

第六,在操作方面,localStorage提供现有的API去访问操作,cookie需要自己来封装或者使用第三方库;但是cookie既可以由服务端来设置,也可以由客户端来设置,localStorage只能是客户端来设置。

另外,因为cookie比较灵活,还可以设置domain、path、httpOnly,domain和path一起来限制cookie能被哪些URL访问,即请求的URL是Domain或其子域、且URL的路径是Path或子路径,则可以访问该cookie;如果某个cookie设置了httpOnly,客户端就无法通过js代码去访问这个cookie。

总体来说,cookie用途多一些,也更灵活,但存储体积小,localStorage可以存储较多内容。

cookie的优缺点

  • 缺点

    • 每个域名下的cookie个数有限
    • 存储量太小,只有5kB
    • 每次HTTP请求都会发送到服务器,影响获取资源的效率
    • 需要自己封装获取、设置、删除cookie的方法
  • 优点
    • 比较灵活
    • 用途多

sessionStorage与localStorage

sessionStorage用于本地存储一个会话中的数据,这些数据只有在同一个会话中的页面才能访问,并且当会话结束后,数据也随之销毁,所以sessionStorage仅仅是会话级别的存储,而不是一种持久化的本地存储。

localStorage是持久化的本地存储,除非是通过JS删除,或者手动清除缓存,否则理论上数据不会过期。

使用场景区别

cookie由于体积小,并不适合专门用于存储用途,主要还是适用于会话凭证。

localStorage和sessionStorage因为体积较大(业界主流为5MB),又主要以字符串的形式存储,更适合用于存储客户端的简单数据。

sessionStorage的数据由于在会话结束后就会被销毁,更适合对安全性要求较高的场景;也适用于存储一些与当前会话关联性较强的数据,比如记录跳转的路由信息,在别的会话窗口就不适用,就可以存储在sessionStorage中。

如果有更多大量复杂结构的数据需要存取访问,可以考虑使用indexDB,但需要考虑indexDB的兼容性。

cookie、session、web storage的更多相关文章

  1. 3 分钟带你深入了解 Cookie、Session、Token

    经常会有用户咨询,CDN 是否会传递 Cookie 信息,是否会对源站 Session 有影响,Token 的防盗链配置为什么总是配置失败?为此,我们就针对 Cookie.Session 和 Toke ...

  2. 浏览器刷新时候不删除信息,关闭后删除用户信息处理办法,浏览器监听刷新以及删除事件、cookie、session、sessionStorage、localStorage区别

    首先我们可以了解到:sessionStorage 不在不同的浏览器窗口中共享,即使是同一个页面: localStorage 和 cookie 在所有同源窗口是共享的 那么我们可以根据用户不同需求来进行 ...

  3. [转]cookie、session、sessionid 与jsessionid

    cookie.session.sessionid 与jsessionid,要想明白他们之间的关系,下面来看个有趣的场景来帮你理解. 我们都知道银行,银行的收柜台每天要接待客户存款/取款业务,可以有几种 ...

  4. cookie、session、sessionid ,jsessionid 的区别

    本文是转载虫师博客的文章http://www.cnblogs.com/fnng/archive/2012/08/14/2637279.html cookie.session.sessionid 与js ...

  5. 【python】-- Django 分页 、cookie、Session、CSRF

    Django  分页 .cookie.Session.CSRF 一.分页 分页功能在每个网站都是必要的,下面主要介绍两种分页方式: 1.Django内置分页 from django.shortcuts ...

  6. application、session、request、page的作用范围、Application,Session和Cookie的区别

    Web应用中的JSP和servlet都是由web服务器来调用,Jsp和Servlet之间通常不会相互调用,那么Jsp和Servlet之间交换数据就要用到application.session.requ ...

  7. cookie、session、token的区别与联系

    https://www.cnblogs.com/moyand/p/9047978.html cookie.session.token存在意义 http协议是无状态协议,请求之间是没有联系的,cooki ...

  8. 傻傻分不清之 Cookie、Session、Token、JWT

    傻傻分不清之 Cookie.Session.Token.JWT 什么是认证(Authentication) 通俗地讲就是验证当前用户的身份,证明“你是你自己”(比如:你每天上下班打卡,都需要通过指纹打 ...

  9. 一文彻底搞懂Cookie、Session、Token到底是什么

    > 笔者文笔功力尚浅,如有不妥,请慷慨指出,必定感激不尽 Cookie 洛:大爷,楼上322住的是马冬梅家吧? 大爷:马都什么? 夏洛:马冬梅. 大爷:什么都没啊? 夏洛:马冬梅啊. 大爷:马什 ...

  10. 还分不清 Cookie、Session、Token、JWT?一篇文章讲清楚

    还分不清 Cookie.Session.Token.JWT?一篇文章讲清楚 转载来源 公众号:前端加加 作者:秋天不落叶 什么是认证(Authentication) 通俗地讲就是验证当前用户的身份,证 ...

随机推荐

  1. GSAP 基础

    GreenSock Animation Platform (GSAP) 是一个业界知名的动画库,它被1100多万个网站使用,有超过50%的获奖的网站都是用了它.不管是在原生环境中,还是任意的框架中,你 ...

  2. python: linux使用多版本python

    安装python3.6 $ sudo add-apt-repository ppa:deadsnakes/ppa $ sudo apt update $ sudo apt install python ...

  3. Wampserver64 报错:无法启动此程序,因为计算机中丢失 MSVCR110.dll。尝试重新安装该程序以解决此问题。

    缺少环境配置, 程序下载地址如下: https://www.microsoft.com/zh-cn/download/confirmation.aspx?id=30679 点击下载,下载完成后,双击程 ...

  4. SpringSecurity1: spring boot web 样例快速体验

    本文只讲操作实践,不讲原理,这样对于想快速搭建起一个基于SpringSecurity的Web项目的朋友们而言,比较友好.文章主要由两部分构成: 快速演示样例 所有账户和授权数据均基于内存,能在极短的时 ...

  5. 《深入理解Java虚拟机》读书笔记:Class类文件的结构

    Class类文件的结构 Sun公司以及其他虚拟机提供商发布了许多可以运行在各种不同平台上的虚拟机,这些虚拟机都可以载入和执行同一种平台无关的的程序存储格式--字节码(ByteCode),从而实现了程序 ...

  6. 《SQL与数据库基础》19. 日志

    目录 日志 错误日志 二进制日志 日志格式 日志查看 日志删除 查询日志 慢查询日志 本文以 MySQL 为例 日志 错误日志 错误日志是 MySQL 中最重要的日志之一,它记录了当 mysql 启动 ...

  7. C++的编译链接与在vs中build提速

    通过gcc或msvc,clang等编译器编译出来的C++源文件是.o文件.在windows上也就是PE文件,linux为ELF文件,在这一步中,调用其它代码文件中的函数的函数地址是未知的(00000) ...

  8. C#中的ConcurrentExclusiveSchedulerPair类

    为什么使用ConcurrentExclusiveSchedulerPair? 现实生活中的例子是一个停车场的入口和出口,多辆车可以同时进入和离开停车场,但是只有一个车辆可以进入或离开一次. 这时候就需 ...

  9. Nomad 系列-Nomad+Traefik+Tailscale 集成实现零信任安全

    系列文章 Nomad 系列文章 Traefik 系列文章 Tailscale 系列文章 概述 终于到了令人启动的环节了:Nomad+Traefik+Tailscale 集成实现零信任安全. 在这里: ...

  10. zabbix 警报推送至企业微信(图文版)

    新增Python脚本 # encoding: utf-8 import sys import requests import json import os import time import re ...