nodejs设置cookie的过期时间,且不允许前端修改cookie,并解析cookie

const http=require('http')
const querystring=require('querystring')

//设置cookie过期时间
const setCookieTiem=()=>{
  let da=new Date()
  da.setTime( da.getTime() + 24*60*60*1000 ) //一天后过期
  return da.toUTCString() //将 1598789234953这种格式的转换成=> "Sat, 29 Aug 2020 12:06:33 GMT"
}

//创建服务
const server=http.createServer((req,res)=>{ 
  res.setHeader('Content-type','application/json') // 设置返回格式
  const data=querystring.parse(req.url.split("?")[1]) //获取 get请求传递的参数
  const url= req.url.split("?")[0] //请求前缀 例 /api/order/all
  const method=req.method //请求方式 
  //console.log('data | url',data.name,url)

  //本来是post请求的 但是为了方便测试 就使用get请求了
  if(url==='/api/user/login' && method==='GET'){ //设置cookie
    //操作cookie | path=/ 设置成为根路由生效 | httpOnly=>禁止前端修改cookie | expires设置过期时间
    res.setHeader('Set-Cookie',`name=${data.name}; path=/; httpOnly; expires=${setCookieTiem()}`)
    res.end( JSON.stringify({ message:'已设置cookie => 请调用 /api/user/login-test接口 查看cookie是否设置成功' }) ) 
    return
  }
  /**
   * 如果前端调用了 设置cookie接口 会在浏览器的cookie中设置一个name属性
   * 
   * 解析cookie接口 即从浏览器中读取cookie  查看cookie中是否有我设置的name属性 且值等于我设置的值
   */

  //解析cookie接口
  if(url==='/api/user/login-test'&& method==='GET'){ 
    req.cookie={}
    let cookieStr= req.headers.cookie||'' //获取请求头中的cookie 这种格式 pgv_pvid=6783597573; RK=WIZEuhS2UH; 
    cookieStr.split(";").forEach(item=>{ //item => pgv_pvid=6783597573
      if(!item) return 
      const arr=item.split("=")
      req.cookie[ arr[0].trim() ]=arr[1].trim() //注意去除空格 不然后端设置不能修改cookie会不生效
    })
    if(req.cookie.name && req.cookie.name==='xc'){ //这个xc的值可以改
      res.end( JSON.stringify({ message: `解析cookie成功  值为${req.cookie.name}` }) ) 
    }else {
      res.end( JSON.stringify({ message:'未成功解析cookie' }) ) 
    }
  }
})
//启动服务
server.listen(8888,()=>{
  console.log('服务已在本地运行 端口号8888')
})

复制以上代码在新建的www.js文件中,然后运行这个文件即可测试

依次运行 node www.js =>
=> http://localhost:8888/api/user/login?name=xc
=> http://localhost:8888/api/user/login-test

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

超帅不是很帅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值