码迷,mamicode.com
首页 > 其他好文 > 详细

express中的cookie和Session

时间:2020-11-17 11:55:05      阅读:3      评论:0      收藏:0      [点我收藏+]

标签:基础   save   必须   div   end   node   变化   cookies   键值对   

cookie

cookie 是存储于访问者的计算机中的变量,可以让我们用同一个浏览器访问同一个域名的时候共享数据。
由于HTTP 是无状态协议。简单地说,当你浏览了一个页面,然后转到同一个网站的另一个页面,服务器无法认识到这是同一个浏览器在访问同一个网站。每一次的访问,都是没有任何关系的。Cookie 是一个简单到爆的想法:当访问一个页面的时候,服务器在下行 HTTP 报文中,命令浏览器存储一个字符串; 浏览器再访问同一个域的时候,将把这个字符串携带到上行HTTP 请求中。第一次访问一个服务器,不可能携带 cookie。 必须是服务器得到这次请求,在下行响应报头中,携带 cookie 信息,此后每一次浏览器往这个服务器发出的请求,都会携带这个 cookie。

基础使用

Express 中要使用 Cookie 的话,我们需要使用 cookie-parser 模块来实现:
1、安装中间件:cnpm install cookie-parser --save
2、使用中间件:
技术图片

 然后,我们就可以在浏览器中查看cookie

技术图片

 常用属性

  • 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=/。如果路径不能匹配时,浏览器则不发送这个 Cookie
  • httpOnly:是微软对 COOKIE 做的扩展。如果在 COOKIE 中设置了“httpOnly”属性,则通过程序(JS 脚本、applet 等)将无法读取到 COOKIE 信息,防止 XSS 攻击产生
  • singed:表示是否签名 cookie, 设为 true 会对这个 cookie 签名,这样就需要用res.signedCookies 而不是 res.cookies 访问它。被篡改的签名 cookie 会被服务器拒绝,并且 cookie 值会重置为它的原始值

 技术图片

 删除cookie

技术图片

 加密cookie

 技术图片  技术图片

Session

Cookie 数据存放在客户的浏览器上,Session 数据放在服务器上。Session 相比 Cookie 要更安全一些。由于 Session 保存到服务器上,所以当访问量增多的时候,会比较占用服务器的性能。单个 cookie 保存的数据大小不能超过 4K,很多浏览器都限制一个站点最多保存 20个 cookie。Session 没有这方面的限制。Session 是基于 Cookie 进行工作的。

基础使用

1、安装中间件:cnpm install express-session --save

2、使用中间件:

const express = require(‘express‘)
const session = require(‘express-session‘)
const app=express()
//配置session的中间件
app.use(session({
    secret: ‘this is session‘, //服务器端生成 session 的签名
    name:"node", //修改session对应cookie的名称
    resave: false, //强制保存 session 即使它并没有变化
    saveUninitialized: true, //强制将未初始化的 session 存储
    cookie: { 
        maxAge:1000*60*30,
        secure: false  // true 表示只有https协议才能访问cookie  
    },
    rolling:true  //在每次请求时强行设置 cookie,这将重置 cookie 过期时间(默认:false)
}))
app.get("/login",(req,res)=>{  
    //设置seesion
    req.session.username="张三"
    req.session.age=20
    res.send("执行登录")
})

app.get("/news",(req,res)=>{
    //获取seesion
    if(req.session.username || req.session.age){
        res.send(req.session.username+"--"+req.session.age+"-已登录")        
    }else{
        res.send("没有登录")
    }
})
app.listen(3000)

技术图片  技术图片

 session删除

 删除session有三种方式:

1、设置过期时间(对所有有效)

req.session.cookie.maxAge=0;

 2、赋空值(仅对当前指定字段有效)

req.session.username="";
3、使用销毁方法
req.session.destroy();

 

 

 
 

 

express中的cookie和Session

标签:基础   save   必须   div   end   node   变化   cookies   键值对   

原文地址:https://www.cnblogs.com/yuyujuan/p/13952251.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!