美文网首页
第十一节 : Cookie与Session

第十一节 : Cookie与Session

作者: 时光如剑 | 来源:发表于2021-01-03 23:14 被阅读0次

1.Cookie

1.1. cookie

HTTP是无状态的链接, 你请求一个网页结束以后,此时你和服务器之间没有任何关系了,没有数据持续通路,下一次访问,服务器是不知道你来过的

所以在HTTP最初的版本,就设计了一个cookie的东西,

简单理解就是服务器在response的响应头中设置一个set-cookie的报文头,用于在访问的浏览器上设置cookie

然后浏览器每次访问这个服务器的时候,都要带着cookies字段上去

app.get("/",function(req,res){
  res.cookie("a",10,{maxAge:900000,httpOnly:true});
  res.send("首页 ")
})

今后对于这个域名的访问,不管端口是什么都会带着cookie上去, 然后服务器通过的到的cookie信息来比较判断你是否是上次来过的人

1.2. 读取cookie
1.2.1 通过请求头来获取cookie信息

cookie是通过请求头抬过来的,那么我们可以通过请求头获取 不过我们获取的是字符串,我们需要自己处理成为对象

app.get("/index",(req,res,next) => {
    res.cookie("username","wuwei",{path:'/',maxAge: 60* 1000})
    console.log(req.headers.cookie)
    res.send("首页")
})
1.2.2 利用第三方模块获取cookie信息

我们可以使用第三方模块cookie-parser,这个包就是用来格式化cookie的显示,只有装了这个依赖之后,服务器才能更好的读取cookie

cookie-parse是一个中间件,可以通过use去使用

const cookieparser = require("cookie-parser")
app.use(cookieparser())

然后就可以通过req.cookies()拿到这个数据

app.get("/",function(req,res){
  console.log(req.cookies);  // 会自动键值对的形式{a:10}
  res.send("首页 ")
})
1.3. cookie的问题

cookie的缺点: 就是不安全,(cookie 可以自由被篡改,并且是铭文保存的) 所以要不就是通过加密处理,或者我们可以使用session

2.Session

session依赖cookie,是一种特殊的cookie,通常用于制作登录验证

session需要是用一个express-session中间件

var session = require("express-session")

配置session

app.use(session({
  secret: 'keyboard cat',   // 加密字符串会通过这个字符串进行加密
  cookie: {maxAge:6000},   // 设置过期时间
  resave: true,   // 即时session 没有被修改, 也保存session值, 默认为true
  saveUninitialized:true, //  无论有没有session cookie 每次请求都设置个session cookie 默认标示为 connect.sid
    rolling: true   // 属性cookie的时间
}))

使用session

app.get("/",function(req,res){
  if(!req.session.a){
    req.session.a = Math.random()*1000
  }
  res.send("随机数是"+req.ression.a)
})

使用session的时候服务器会在内存中(内存条,不是硬盘,不是数据库)缓存你的一些信息,哈希结构(hash结构,k-v对结构),然后通过cookie发给前端一个乱码,持有这个cookie乱码的人访问这个服务器,服务器会通过乱码匹配拿到这个用户在内存中缓存的值,服务器就只到你的值是多少

session的读和设都在req上

3. Koa Cookie的使用

3.1 Koa中设置 Cookie的值

语法

​ ctx.cookies.set(name,value,[options])

参数

  1. name: cookie的名称
  2. value: cookie的值
  3. options: 可选 cookie配置
options 配置
options 名称 opotions 值
maxAge 从当前到过期的毫秒数(数字)
expires cookie的过期时间(Date)
path cookie 路径 默认是 '/'
domain cookie 域名
secure 安全cookie, 默认为false, 设置true,表示只有https可以访问
httpOnly 是否只是服务器可访问cookie
3.2 Koa 中获取 Cookie的值

语法

​ ctx.cookies.get(name)

参数

  1. name: cookie的名称

注意,Koa中没法直接设置中文的Cookie

解决方案:

  1. 设置cookie的时候,可以通过将中文转为buffer在转为base64的字符串, 设置cookie
  2. 获取cookie 在base64的字符串转为buffer在转为普通字符

4. Koa session使用

session 是另一种记录客户端状态的机制, 不同的是Cookie保存在客户端浏览器中, 而Session 保存在服务器上

4.1 Session的使用流程

当浏览器访问服务器并发送第一次请求时, 服务端创建一个session对象,生成一个类似于key,value的键值对,然后将key(cookie)返回到浏览器(客户)端,浏览器下次在访问时,携带key(cookie), 找到对应的session(value). 客户的信息都保存在session中

4.2 安装使用

1.安装session

$ npm install koa-session --save

2.引入session

const session = require("koa-session")

3.配置session中间件

app.keys = ['some secret hurr'];

const CONFIG = {
    key: 'koa:sess', /**  cookie的key。 (默认是 koa:sess) */
    maxAge: 86400000, /**  session 过期时间,以毫秒ms为单位计算 。*/
    autoCommit: true, /** 自动提交到响应头。(默认是 true) */
    overwrite: true,  /** 是否允许重写 。(默认是 true) */
    httpOnly: true,  /*表示是否可以通过javascript来修改,设成true会更加安全*/
    signed: true, /**  是否签名。(默认是 true) */
    rolling: false, /** 是否每次响应时刷新Session的有效期。(默认是 false) */
    renew: false,   /** 是否在Session快过期时刷新Session的有效期。(默认是 false) */

};

app.use(session(CONFIG, app));

4.使用session

// 设置session
ctx.session.username = 'XXX'
// 获取session
ctx.session.username

相关文章

网友评论

      本文标题:第十一节 : Cookie与Session

      本文链接:https://www.haomeiwen.com/subject/fkvgnktx.html