Express Cookie的使用

Cookie 简介

  • cookie 是存储于访问者的计算机中的变量。可以让我们用同一个浏览器访问同一个域名的时候共享数据。

  • HTTP 是无状态协议。简单地说,当你浏览了一个页面,然后转到同一个网站的另一个页面,服务器无法认识到这是同一个浏览器在访问同一个网站。每一次的访问,都是没有任何关系的。

  • Cookie 是一个简单到爆的想法:当访问一个页面的时候,服务器在下行 HTTP 报文中, 命令浏览器存储一个字符串; 浏览器再访问同一个域的时候,将把这个字符串携带到上行 HTTP 请求中。第一次访问一个服务器,不可能携带 cookie。 必须是服务器得到这次请求, 在下行响应报头中,携带 cookie 信息,此后每一次浏览器往这个服务器发出的请求,都会携带这个 cookie。

Cookie 特点

●cookie 保存在浏览器本地
● 正常设置的 cookie 是不加密的,用户可以自由看到;
● 用户可以删除 cookie,或者禁用它
● cookie 可以被篡改
● cookie 可以用于攻击
● cookie 存储量很小。未来实际上要被 localStorage 替代,但是后者 IE9 兼容。

Cookie 的使用

1.安装

cnpm instlal cookie-parser --save

2.引入

    var cookieParser = require('cookie-parser');  

3.设置中间件

  app.use(cookieParser());  

4.设置 cookie

   res.cookie("name",'zhangsan',{maxAge: 900000, httpOnly: true});  //HttpOnly 默认 false 不允许 客户端脚本访问 

5.获取 cookie

     req.cookies.name 

属性说明:

domain: 域名  name=value:键值对,可以设置要保存的 Key/Value,注意这里的 name 不能和其他属性项的名字一样     Expires: 过期时间(秒),在设置的某个时间点后该 Cookie 就会失效,如 expires=Wednesday,
09-Nov-99 23:12:40 GMT   maxAge: 最大失效时间(毫秒),设置在多少后失效     secure: 当 secure 值为 true 时,cookie 在 HTTP 中是无效,在 HTTPS 中才有效 Path: 表示 cookie 影响到的路,如 path=/。如果路径不能匹配时,浏览器则不发送这个 CookiehttpOnly:是微软对 COOKIE 做的扩展。如果在 COOKIE 中设置了“httpOnly”属性,则通过程序(JS 脚本、applet 等)将无法读取到COOKIE 信息,防止 XSS 攻击产生 singed:表示是否签名cookie, 设为true 会对这个 cookie 签名,这样就需要用 res.signedCookies 而不是 res.cookies 访问它。被篡改的签名 cookie 会被服务器拒绝,并且 cookie 值会重置为它的原始值

domain属性使用demo:

    /*cookie-parser可以设置和获取cookie1.安装   cnpm instlal cookie-parser --save2.引入var cookieParser = require('cookie-parser');3.设置中间件app.use(cookieParser());4.设置cookieres.cookie("name",'zhangsan',{maxAge: 900000, httpOnly: true});//HttpOnly 默认false不允许 客户端脚本访问5.获取cookiereq.cookies.namecookie保存在浏览器本地   如果没有过期的话关闭浏览器在打开cookie还是存在的baidu.com  域名news.baidu.comwww.baidu.comaaa.comnews.aaa.comwww.aaa.com//domain:'.aaa.com' 多个二级域名共享cookie* */var express  = require('express');var cookieParser = require('cookie-parser');var app = express();app.use(cookieParser());app.get("/",function(req,res){console.log(req.cookies);res.send("你好nodejs");});app.get("/news",function(req,res){console.log(req.cookies);res.send("你好nodejs  news");});app.get("/set",function(req,res){//参数1:名字//参数2:cookie的值//参数3:cookie的配置信息res.cookie('username','cookie的值111',{maxAge:600000,domain:'.aaa.com'});res.send("设置cookie成功");});app.listen(3001,'127.0.0.1');path属性使用demo:/*cookie-parser可以设置和获取cookie1.安装   cnpm instlal cookie-parser --save2.引入var cookieParser = require('cookie-parser');3.设置中间件app.use(cookieParser());4.设置cookieres.cookie("name",'zhangsan',{maxAge: 900000, httpOnly: true});//HttpOnly 默认false不允许 客户端脚本访问5.获取cookiereq.cookies.namecookie保存在浏览器本地   如果没有过期的话关闭浏览器在打开cookie还是存在的baidu.com  域名news.baidu.comwww.baidu.comaaa.comnews.aaa.comwww.aaa.comdomain:'.aaa.com' 多个二级域名共享cookiepath  表示在哪个路由下面可以访问cookiehttpOnly:true 设置为true,表示只有在nodejs服务端可以操作cookie ,没法用js脚本语言操作cookie* */var express  = require('express');var cookieParser = require('cookie-parser');var app = express();app.use(cookieParser());app.get("/",function(req,res){console.log(req.cookies);res.send("你好nodejs");});app.get("/news",function(req,res){console.log(req.cookies);res.send("你好nodejs  news");});app.get("/set",function(req,res){//参数1:名字//参数2:cookie的值//参数3:cookie的配置信息res.cookie('userinfo','cookie111',{maxAge:600000,path:'/news',httpOnly:true});res.send("设置cookie成功");});app.listen(3001,'127.0.0.1');

设置 cookie

res.cookie('rememberme', '1', { maxAge: 900000, httpOnly: true }) res.cookie('name', 'tobi', { domain: '.example.com', path: '/admin', secure: true }); res.cookie('rememberme', '1', { expires: new Date(Date.now() + 900000), httpOnly: true }); 

获取 cookie

    req.cookies.name 

设置并获取cookie的demo:

/*cookie-parser可以设置和获取cookie1.安装   cnpm instlal cookie-parser --save2.引入var cookieParser = require('cookie-parser');3.设置中间件app.use(cookieParser());4.设置cookieres.cookie("name",'zhangsan',{maxAge: 900000, httpOnly: true});//HttpOnly 默认false不允许 客户端脚本访问5.获取cookiereq.cookies.name* */var express  = require('express');var cookieParser = require('cookie-parser');var app = express();app.use(cookieParser());app.get("/",function(req,res){console.log(req.cookies);res.send("你好nodejs");});app.get("/news",function(req,res){console.log(req.cookies);res.send("你好nodejs  news");});app.get("/set",function(req,res){//参数1:名字//参数2:cookie的值//参数3:cookie的配置信息res.cookie('username','cookie的值',{maxAge:60000});res.send("设置cookie成功");});app.listen(3001,'127.0.0.1');

删除 cookie

    res.cookie('rememberme', '', { expires: new Date(0)}); res.cookie('username','zhangsan',{domain:'.ccc.com',maxAge:0,httpOnly:true}); 

加密 Cookie

1.配置中间件的时候需要传参

    var cookieParser = require('cookie-parser');  app.use(cookieParser('123456'));  

2.设置 cookie 的时候配置 signed 属性

res.cookie('userinfo','hahaha',{domain:'.ccc.com',maxAge:900000,httpOnly:true,signed:true}); 

3.signedCookies 调用设置的 cookie

    console.log(req.signedCookies);   

demo:

    /*cookie-parser可以设置和获取cookie1.安装   cnpm instlal cookie-parser --save2.引入var cookieParser = require('cookie-parser');3.设置中间件app.use(cookieParser());4.设置cookieres.cookie("name",'zhangsan',{maxAge: 900000, httpOnly: true});//HttpOnly 默认false不允许 客户端脚本访问5.获取cookiereq.cookies.namecookie保存在浏览器本地   如果没有过期的话关闭浏览器在打开cookie还是存在的aaa.comnews.aaa.comwww.aaa.commaxAge  过期时间domain:'.aaa.com' 多个二级域名共享cookiepath  表示在哪个路由下面可以访问cookiehttpOnly:true 设置为true,表示只有在nodejs服务端可以操作cookie ,没法用js脚本语言操作cookiesigned属性设置成true 表示加密cookie信息让用户看不到cookie明文信息1.保存的时候加密2.cookie-parser里面  signed属性设置成truecookie的加密:1.参数表示加密的随机字符串app.use(cookieParser('sign'));2.设置res.cookie('userinfo','cookie222_info',{maxAge:600000,signed:true});3.使用  获取req.signedCookies* */var express  = require('express');var cookieParser = require('cookie-parser');var app = express();app.use(cookieParser('sign'));app.get("/",function(req,res){//console.log(req.cookies);console.log(req.signedCookies);   /*获取加密的cookie信息*/res.send("你好nodejs");});app.get("/set",function(req,res){//参数1:名字//参数2:cookie的值//参数3:cookie的配置信息res.cookie('userinfo','cookie222_info',{maxAge:600000,signed:true});res.send("设置cookie成功");});app.listen(3001,'127.0.0.1');

Cookie 的应用

查看浏览过的城市:

/** cookie-parser可以设置和获取cookie1.安装   cnpm instlal cookie-parser --save2.引入var cookieParser = require('cookie-parser');3.配置中间件app.use(cookieParser());4.设置cookieres.cookie("name",'zhangsan',{maxAge: 900000, httpOnly: true});//HttpOnly 默认false不允许 客户端脚本访问5.获取cookiereq.cookies.name** */var express  = require('express');var cookieParser = require('cookie-parser');var app = express();app.use(cookieParser());app.get("/",function(req,res){res.send("您浏览过的城市-"+req.cookies.citys);});/*您浏览过的城市  /lvyou?city=北京  /lvyou?city=上海    /lvyou?city=杭州    /lvyou?city=重庆 */app.get("/lvyou",function(req,res){//写入数据要做判断var city=req.query.city;  /*获取当前城市*/var citys=req.cookies.citys;  /*数组  获取所有的城市*/if(citys){citys.push(city)}else{citys=[];  /*没有浏览过任何城市的话 citys改为数组 */citys.push(city)}res.cookie('citys',citys,{maxAge:60*1000*10});res.send("您浏览的城市是"+city);});app.listen(3001);

Express Cookie的使用相关推荐

  1. node --- [express] cookie/session 机制与 中间件的使用(路由守卫)

    说明 源代码 记忆.遗忘回顾 使用 cookie/session 机制,让 客户端/服务器 的访问变得有状态 cookie 与 session 由于 HTTP 协议的无状态性,当一次连接断开后. 服务 ...

  2. Express Cookie 的基本使用

    一.Cookie 简介 ● cookie 是存储于访问者的计算机中的变量.可以让我们用同一个浏览器访问同一个域 名的时候共享数据. ● HTTP 是无状态协议.简单地说,当你浏览了一个页面,然后转到同 ...

  3. express使用JWT和httpOnly cookie进行安全验证

    express使用JWT和httpOnly cookie进行身份验证 对大创项目中使用JWT作为身份验证的总结. 一般情况使用JWT作为身份验证的方式可以直接参考这篇文章:Node.js 使用 exp ...

  4. express的cookie解析和签名源码解析

    ​ var express = require('express')var cookieParser = require('cookie-parser')var signature = require ...

  5. Express框架Restful API Ajax 跨域 开启Cookie支持

    前端(Jquery Ajax): 1 $.ajax({ 2 url: "http://localhost/api/test/", 3 type: "POST", ...

  6. java cookie过期_在Express中,会话Cookie过期

    我可能只是不明白Express如何管理会话,但是当我将会话设置为在7天后过期时,例如 app.configure(function () { app.set(express.static(__dirn ...

  7. Node.js Express 框架 Express

    Express 简介 Express 是一个简洁而灵活的 node.js Web应用框架, 提供了一系列强大特性帮助你创建各种 Web 应用,和丰富的 HTTP 工具. 使用 Express 可以快速 ...

  8. HTML用cookie实现自动登录,用cookie实现websocket自动登录,session状态保留。

    原标题:用cookie实现websocket自动登录,session状态保留. 会话状态的保留,即登录状态保持,是很常见.很常用的功能. 本文将介绍,在NodeJS开发中,如何实现websocket连 ...

  9. Express.js 中的 Sessions 如何工作?(译)

    世界上任何一个拥有用户数据的 web 应用都必须处理 sessions.作为一名开发者,我们必须要知道它们是什么以及如何处理它们. 在这篇文章中,我想要分享的是: session 是什么? sessi ...

最新文章

  1. JUnit 5 – 早期试用体验 – 第2篇
  2. python真的好吗-python的缩进格式真的不好吗?
  3. Python的冷技巧小技巧
  4. Druid 连接泄漏监测
  5. 创业者应具备的基本商业知识
  6. 【汇编语言】DEBUG的使用
  7. 吴恩达,确诊新冠阳性!
  8. shell 获取MD5值
  9. mysql数据库之单表查询
  10. vue element-ui 键盘输入enter键 触发事件
  11. intellIj idea修改英文字体解决大写的“I”和小写的“l”显示冲突问题
  12. Win11+RTX3060显卡 配置cuda和cudnn
  13. 艰难2020:人工智能的应用是否已停滞不前?
  14. 计算捐款总量 (10 分)
  15. 上海大学生计算机应用能力大赛答辩,2018年(第十届)上海市大学生计算机应用能力大赛成功举行...
  16. 我国高速公路交通荷载标准研究
  17. 疯了疯了,安利一款非常好用的屏幕捕捉工具FSCapture
  18. C++ 计算一个数的根号值
  19. C++新特性之五:标准库中的正则表达式扩充
  20. TPC-DS 生成数据

热门文章

  1. 第17课 项目成本管理
  2. IT程序员的抉择:我要离开帝都了
  3. c 语言 图片大小,ABCDEFG罩杯有多大啊,最好能用数字和语言或者图片来形容下,? 爱问知识人...
  4. 石头扫地机器人遇见地毯_作为用户我强烈推荐石头扫地机器人!请看我的使用体验...
  5. 2022安全员-C证上岗证题目及答案
  6. 【语义分割】Searching for Efficient Multi-Scale Architectures for Dense Image Prediction翻译
  7. 【Verilog 设计】Verilog 实现偶数、奇数分频和任意小数分频
  8. noip2002 自由落体 (物理)
  9. java实现图片镜像翻转
  10. Swift 方法的多面性