第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

NodeJS 操作cookie

標(biāo)簽:
Node.js JavaScript

本文简介

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


虽然现在在浏览器存储数据大多时候都使用 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)

點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺(jué)得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評(píng)論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評(píng)論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說(shuō)多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消