Cookie、LocalStorage、SessionStorage的异同

2024-03-15 10:18

本文主要是介绍Cookie、LocalStorage、SessionStorage的异同,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Cookie、LocalStorage、SessionStorage的异同

基本概念

  • Cookie 的大小限制为4kb左右,主要作用是保存登录信息,比如登录某个网站时候看到“记住密码”,一般都是通过在 Cookie 中存入一段辨别用户身份的数据来实现的
  • LocalStorage 和 sessionStorage 都是 HTML5 标准中新加入的技术,主要用来做本地存储,但是二者保存数据的生命周期不同
  • Session 是“会话”的意思,sessionStorage 只是可以将一部分数据在当前会话中保存下来,刷新页面数据依旧存在,但当页面关闭后,sessionStorage 中的数据就会被清空。而 LocalStorage 存储的数据除非被清除,否者永远存在本地

Cookie与Session的区别

  • cookie数据存放在浏览器中,session数据存放在服务器上
  • cookie是不安全的,别人可以分析存放在本地的cookie并进行cookie诈骗,考虑到安全性能,应尽量使用session
  • session会在一定时间内保存在服务器上。当访问增多时,会比较占用服务器的性能。考虑到服务性能,应尽量使用cookie
  • 单个cookie保存的数据不能超过4k,很多浏览器都限制一个站点最多保存20个cookie

cookie和session都用来存储用户信息,cookie存放于客户端有可能被窃取,所以cookie一般用来存放不敏感的信息,比如用户设置的网站主题,敏感的信息用session存储,比如用户的登录信息

Cookie、LocalStorage、SessionStorage的异同

  • HTML5中提出了webStorage的概念,webStorage包括sessionStorage和localStorage,只为了保存数据,不会与服务器进行通信
  • cookie,localStorage,sessionStorage都是在客户端保存数据,存储数据的类型:字符串
  • webStorage不会随着HTTP header发送到服务器端,所以安全性相对来说比cookie高,不必担心截获
  • 生命周期不同(见后文),localStorage要手动清除,sessionStorage在浏览器关闭后清除

11

LocalStorage与SessionStorage的API

xxxxxStorage.setItem('key',value)
// 接收一个键和值作为参数,把键值对添加到存储中
// 如果键名存在,则更新其对应的值。xxxxxStorage.getItem('key')
// 接收一个键名作为参数,返回键名对应的值xxxxxStorage.removeItem('key')
// 接收一个键名作为参数,并把该键名从存储中删除xxxxxStorage.clear()
// 清空存储中的所有数据// 注意:只能存储字符串,不能存储对象、JSON等其他数据格式// 存储对象时,需要通过JSON.stringify()将对象转化为字符串
localStorage.setItem(key,JSON.stringify(data))
// 取出对象时,需要通过JSON.parse()将字符串转化为对象
JSON.parse(localStorage.getItem(key))

应用场景

  • 因为考虑到每个 HTTP 请求都会带着 Cookie 的信息,所以 Cookie 当然是能精简就精简,比较常用的一个应用场景就是判断用户是否登录。
  • 针对登录过的用户,服务器端会在他登录时往 Cookie 中插入一段加密过的唯一辨识单一用户的辨识码,下次只要读取这个值就可以判断当前用户是否登录啦
  • Localstorage常用于长期登录,适合长期保存在本地的数据,比如用户信息
  • Sessionstorage常用于敏感账号一次性登陆,如关闭当前页面再次打开页面就要重新登陆

这篇关于Cookie、LocalStorage、SessionStorage的异同的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/811627

相关文章

Java后端接口中提取请求头中的Cookie和Token的方法

《Java后端接口中提取请求头中的Cookie和Token的方法》在现代Web开发中,HTTP请求头(Header)是客户端与服务器之间传递信息的重要方式之一,本文将详细介绍如何在Java后端(以Sp... 目录引言1. 背景1.1 什么是 HTTP 请求头?1.2 为什么需要提取请求头?2. 使用 Spr

JavaScript中document.cookie

“某些 Web 站点在您的硬盘上用很小的文本文件存储了一些信息,这些文件就称为 Cookie。”—— MSIE 帮助。一般来说,Cookies 是 CGI 或类似,比 HTML 高级的文件、程序等创建的,但是 javascript 也提供了对 Cookies 的很全面的访问权利。       每个 Cookie 都是这样的:<cookie名>=<值>   <cookie名>的限制与 javasc

html记账本改写:数据重新布局,更好用了,没有localStorage保存版本

<!DOCTYPE html><html lang="zh-CN"><head><meta charset="UTF-8"><title>htm记账本</title><style>table {user-select: none;/* width: 100%; */border-collapse: collapse;}table,th,td {border: 1px solid bla

html 本地存储(localStorage and sessionStorage)

刚刚学习anjularJS和html的项目开发,其中在ui库中使用一种步骤类型的样式,其实就是form表单的ng-if判断显示,样式好用但也伴随着很多的问题,其中一个bug就是刷新会回到第一步,回到第一步的原因是刷新时会从新加载js代码,因为状态没变,所以就会出现无论刷新的哪一步,都会回到第一步,解决该问题的方法就是本地存储。 百度发现有两种存储方式,一个是sessionStorage,还有个

flask-login 生成 cookie,session

flask-login 生成 cookie,session Flask-Login login_user() 显示来自 Set-Cookie 标头的加密 cookie # 模拟一个用户类class User(UserMixin):def __init__(self, id):self.id = id@app.route('/login')def login():# 模拟用户登录过程user

【Http 每日一问,访问服务端的鉴权Token放在header还是cookie更合适?】

结论先行: token静态的,不变的,放在header里面。 典型场景 ,每次访问时需要带个静态token请求服务端,向服务端表明是谁请求,此时token也可以认为是个固定的access-key。token动态的,会失效,放在cookie里面。 典型场景,业务登录态token,存在有效期的,过一段时间可能会失效。 下面具体展开下。 在选择将鉴权 Token 放在 HTTP Header 还是

剖析Cookie的工作原理及其安全风险

Cookie的工作原理主要涉及到HTTP协议中的状态管理。HTTP协议本身是无状态的,这意味着每次请求都是独立的,服务器不会保留之前的请求信息。为了在无状态的HTTP协议上实现有状态的会话,引入了Cookie机制。 1. Cookie定义 Cookie,也称为HTTP cookie、web cookie、互联网cookie或浏览器cookie,是一种用于在用户浏览网站时识别用户并为其准备

uniapp微信小程序开发踩坑日记:Pinia持久化报错Cannot read property ‘localStorage‘ of undefined

插件默认使用 localStorage 实现持久化,小程序端不兼容,需要替换持久化 API import { defineStore } from 'pinia'   export const useCommonStore = defineStore('pack-store', {state: (): State => ({wwInfo: {},globalData: {},timerLoc

bash脚本2_对比多个不同版本同名文件的异同

bash脚本2_对比多个不同版本同名文件的异同 #!/bin/bashFOLDER_A="$1"FOLDER_B="$2"IGNORE_STRING="loc_timestamp"subfolders=$(ls -d "$FOLDER_A"/*/)for subfolderA in $subfolders; dosubfolder_name=$(basename "$subfol

Mybatis与Hibernate的异同

以前没怎么用过mybatis,只知道与hibernate一样是个orm数据库框架。随着使用熟练度的增加,发现它与hibernate区别是非常大的,结合至今为止的经验,总结出以下几点: 1. hibernate是全自动,而mybatis是半自动。 hibernate完全可以通过对象关系模型实现对数据库的操作,拥有完整的JavaBean对象与数据库的映射结构来自动生成sql。而mybatis