NodeJS 操作cookie


theme: smartblue

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第22天,点击查看活动详情

本文简介

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

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

```js 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 设置成 /。这样就可以让所有请求都带上登录信息了。

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

规定服务端才能操作 httpOnly

因为前端也可以使用 document.cookie 去获取和修改 cookie 的,如果你不希望某个 cookie 值被前端修改和访问,可以设置 httpOnly

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

设置过期时间 expires

如果你需要给 cookie 某个值设置过期时间,可以设置 expires

比如我想设置1天后过期

```js 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()};) ```

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

```js 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 里获取。

```js 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 解析成对象。

```js // 解析 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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值