关于前端:NodeJS-操作cookie

45次阅读

共计 2226 个字符,预计需要花费 6 分钟才能阅读完成。

本文简介

点赞 + 关注 + 珍藏 = 学会了

尽管当初在浏览器存储数据大多时候都应用 LocalStorageSessionStorage 了,但 cookie 还是有用的。

cookie 是一个 5k 的小仓库,存的货色不多,而且是以字符串的模式存储的。

cookie 的格局是:key1=value1; key2=value2; key3=value3;

在后端解决登录状态时也会用到 cookie。前端每次发送 http 申请时都会将清秋浴的 cookie 一起发送给服务端。

而后端也能够设置 cookie

后端设置 cookie 的势力比前端大。

前端要获取 cookie 能够应用 document.cookie,要设置 cookie 能够应用 document.cookie = 'key1=value1;' 的形式。

但本文次要解说 NodeJS 如何操作 cookie,所以前端局部就不过多解说了。

设置 Cookie

在《node http 申请》中讲过如何应用 NodeJS 写写接口,应用 http 模块的 createServer (fn) 办法能够创立一个服务,该办法接管一个回调函数,回到函数里有 2 个参数,一个是 req,一个是 res

要设置 Cookie 能够应用 res.setHeader() 进行操作。

设置简略的 Cookie

const http = require('http')

const server = http.createServer((req, res) => {res.setHeader('Set-Cookie', 'msg=hello;')
  res.end('hello')
})

server.listen(8000)

应用 res.setHeader 办法,第一个参数是 Set-Cookie,第二个参数是 cookie 的值。

最初用 res.end 完结。

设置 path

如果是登录性能设置了 cookie,通常倡议把登录信息那条数据的 path 设置成 /。这样就能够让所有申请都带上登录信息了。

// 省略局部代码
res.setHeader('Set-Cookie', 'msg=hello; path=/;')

规定服务端能力操作 httpOnly

因为前端也能够应用 document.cookie 去获取和批改 cookie 的,如果你不心愿某个 cookie 值被前端批改和拜访,能够设置 httpOnly

// 省略局部代码
res.setHeader('Set-Cookie', 'msg=hello; httpOnly;')

设置过期工夫 expires

如果你须要给 cookie 某个值设置过期工夫,能够设置 expires

比方我想设置 1 天后过期

const cookieExpires = () => {const d = new Date() // 获取以后工夫
  d.setTime(d.getTime() + (24 * 60 * 60 * 1000))
  return d.toGMTString()}

// 省略局部代码
res.setHeader('Set-Cookie', `msg=hello; expires=${cookieExpires()};`)

如果是登录信息,我通常会这样写:

const http = require('http')

const cookieExpires = () => {const d = new Date() // 获取以后工夫
  d.setTime(d.getTime() + (24 * 60 * 60 * 1000))
  return d.toGMTString()}

const server = http.createServer((req, res) => {res.setHeader('Set-Cookie', `token=xxxx; path=/; httpOnly; expires=${cookieExpires()}`)
  res.end('hello')
})

server.listen(8000)

获取 Cookie

NodeJS 要获取 cookie 能够在 req 里获取。

const http = require('http')

const server = http.createServer((req, res) => {

  const cookieStr = req.headers.cookie // 获取 cookie
  console.log(cookieStr) // 在控制台输入 cookie
})

server.listen(8000)

解析 Cookie

通过下面的办法获取到的 cookie 是一个格局为 key1=value1; key2=value2; key3=value3 的字符串。

看到这个格局其实是比拟工整的,每个键值对都用 ; 隔开,每个分号前面又有一个空格。

所以能够通过上面的办法将 cookie 解析成对象。

// 解析 cookie
let cookie = {}
const cookieStr = req.headers.cookie || ''cookieStr.split(';').forEach(item => {if (!item) {return}
  const arr = item.split('=')
  const key = arr[0].trim()
  const val = arr[1].trim()
  cookie[key] = val
    
  res.end()})

server.listen(8000)

举荐浏览

👍《NodeJS http 申请》

👍《NodeJS 5 分钟 连贯 MySQL 增删改查》

👍《前端须要的收费在线 api 接口》

👍《『前端必备』本地数据接口 —— json-server 从入门到收缩》

你负责点赞,我负责更新 ✌
点赞 + 关注 + 珍藏 = 学会了

正文完
 0