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

你可能感兴趣的:(node.js,nodejs,javascript)