我的编程空间,编程开发者的网络收藏夹
学习永远不晚

JavaScriptcookie与session的使用及区别深入探究

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

JavaScriptcookie与session的使用及区别深入探究

1. cookie

1.1 什么是cookie

cookie是解决http无状态的一种方案。

服务端与服务端经过三次握手后建立连接,数据发送完后连接关闭,在之后的请求中服务端无法判断每次的请求是不是由同一个用户发出的。当后面的请求依赖之前的请求数据的时候,客户端每次请求数据的时候必须先将之前的数据保存下来然后放在后面请求体中。而cookie正是解决这个问题的方案,服务端在响应客户端请求的时候将cookie放在请求头中一起传递到客户端,在之后的请求中客户端都会带上这个cookie,服务端验证cookie做出响应。

1.2 KOA中使用cookie

router.get('/getCurrentUserInfo',async ctx=>{
 ctx.cookies.set('userInfo',999);
 ctx.body =  'success';
});

可以看到响应头里面包含set-cookie的字段

如果要设置中文的值需要处理下格式

  const str = new Buffer('hello cookie!').toString();
  ctx.cookies.set('userInfo',str);

ctx.cookies.set(name,value,conifg)还接受第三个参数config,用来配置cookie的作用范围和作用时间

ctx.cookies.set(u_id,111111,{
expires: new Date(),
maxAge: 1000 * 3600 * 4,
domain: '/',
path: '/',
httpOnly: false,
secure: false,
overWrite: false,
})

1.3 expires和maxAge

expires和maxAge都用来设置cookie的有效时间,expires是指定一个日期与客户端本地的时间进行比较,maxAge类似倒计时,cookie在设置后的若干毫秒内有效。本地的时间是可以被修改的,而同一台服务器的时间总是相同的,因此maxAge比expires更加稳定可靠。

// 使用expires
const expiresDate = new Date(Date.now() + 1000 * 3600 * 2);  // 2小时候后过期
ctx.cookie.set('u_id':11111,{
expires: expiresDate
});
// 使用maxAge
ctx.cookie.set('u_id':11111,{
expires: new Date(1000 * 3600 * 2);
});

1.4 浏览器端设置和删除cookie

在浏览器中直接通过document.cookie设置cookie的时候也可以配置domain、path、secure等属性但是无法设置httpOnly。

//设置cookie
const expiresDate = new Date(Date.now() + 1000 * 3600 * 4); // 4小时候过期
document.cookie = `userName=张三;path='/';expires=${expiresDate.toGMTString()}`;
//删除cookie
const expiresDate = new Date(); 
document.cookie = `userName=张三;path='/';expires=${expiresDate.toGMTString()}`;

要注意使用的是GMT字符串格式的时间

2. session

2.1 什么是session

session的工作原理和cookie非常类似,在cookie中存放一个sessionID,真实的数据存放在服务器端,客户端每次发送请求的时候带上sessionID,服务端根据sessionID进行数据的响应。

2.2 koa中使用session

安装和挂载

yarn add koa-session --save;

session的设置和获取

const kao = require('koa');
const session  = require('koa-session');
const app = new Koa();
const CONFIG = {
  key: 'koa.sess', 
  
  
  
  maxAge: 1000 * 3600 * 4,
  autoCommit: true, 
  overwrite: true, 
  httpOnly: true, 
  signed: true, 
  rolling: false, 
  renew: false, 
  secure: false, 
  sameSite: null, 
};
app.use(session(CONFIG, app));
// or if you prefer all default config, just use => app.use(session(app));
app.listen(3000,()=>{});

3. cookie和session的区别

  • cookie存储在客户端,session存储在服务端,session比cookie更安全
  • cookie的存储数据的格式只能是字符串,且最多只能存储4kb左右的数据,session能存储大量的数据且支持多样的数据格式如json
  • session 由于存储在服务端,当session多的时候会对服务器产生压力,影响服务器性能。

4. cookie和session的使用场景

  • 对于简单而且不敏感的数据通常使用cookie保存,如购物车信息、用户在站点的行为记录等
  • 对于复杂且敏感的数据使用session保存,如用户的账号信息等

到此这篇关于JavaScript cookie与session的使用及区别深入探究的文章就介绍到这了,更多相关JS cookie与session内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

JavaScriptcookie与session的使用及区别深入探究

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

JavaScriptcookie与session的使用及区别深入探究

这篇文章主要介绍了Java中Cookie和Session详解,文章围绕主题展开详细的内容介绍,具有一定的参考价值,感兴趣的小伙伴可以参考一下
2022-11-13

C++深入探究重载重写覆盖的区别

C++允许多个函数拥有相同的名字,只要它们的参数列表不同就可以,这就是函数的重载(FunctionOverloading),借助重载,一个函数名可以有多种用途
2022-11-13

MySQL深入详解delete与Truncate及drop的使用区别

目录一、删除的内容deletetruncatedrop drop二、删除过程三、表和索引所占空间四、应用范围五、删除程度六、处理速度七、语句类型:八、语法区别九、总结deletetruncatedrop参考文章:链接一、删除的内容del
2022-07-25

深入探究JavaScript中WeakMap的原理与用法

这篇文章主要对JavaScript中的WeakMap进行深入探究,包括它的原理、用法和注意事项等,文中的示例代码简洁易懂,需要的小伙伴可以参考一下
2023-05-20

JavaScript原型与原型链深入探究使用方法

js中的原型与原型链应该是老生常谈的话题了,在前端面试中基本都是必问的一个问题,但是很多人还是稀里糊涂的,只知道其表层含义。本文将带大家深入了解JavaScript中的原型与原型链,感兴趣的可以学习一下
2022-11-13

深入探讨:Goroutine和Coroutine的区别与优劣势

Goroutine 和 Coroutine 是两种并发编程的模型,在不同的编程语言和环境中被广泛使用。本文将深入探讨 Goroutine 和 Coroutine 的区别以及它们各自的优劣势,并附带具体的代码示例。1. Goroutine
深入探讨:Goroutine和Coroutine的区别与优劣势
2024-03-12

深入探究Golang中log标准库的使用

Go 语言标准库中的 log 包设计简洁明了,易于上手,可以轻松记录程序运行时的信息、调试错误以及跟踪代码执行过程中的问题等。本文主要来深入探究 log 包的使用和原理,帮助读者更好地了解和掌握它
2023-05-19

深入探究Golang中flag标准库的使用

在本文中,我们将深入探讨flag标准库的实现原理和使用技巧,以帮助读者更好地理解和掌握该库的使用方法,文中的示例代码讲解详细,感兴趣的可以了解一下
2023-05-18

深入探讨Go语言线程与进程的区别

go 语言中,线程与进程的主要区别在于:内存空间:线程共享进程的内存空间,而进程拥有自己的独立内存空间。重量级:线程重量级较轻,进程重量级较重。操作系统管理:进程受操作系统管理,线程不受操作系统管理。通信方式:线程通过共享内存通信,进程通过
深入探讨Go语言线程与进程的区别
2024-04-04

数据库中update与delete使用表别名的深入研究

目录总结1 Update1.1 测试用例UPDATE users as a SET a.age = 111 WHERE a.name = Alice;1.2 测试用例UPDATE users as a SET a.age = 111 WHE
数据库中update与delete使用表别名的深入研究
2024-10-23

编程热搜

目录