Express Cookie 的基本使用

一、Cookie 简介

● cookie 是存储于访问者的计算机中的变量。可以让我们用同一个浏览器访问同一个域 名的时候共享数据。

● HTTP 是无状态协议。简单地说,当你浏览了一个页面,然后转到同一个网站的另一个页 面,服务器无法认识到这是同一个浏览器在访问同一个网站。每一次的访问,都是没有任何 关系的。

● Cookie 是一个简单到爆的想法:当访问一个页面的时候,服务器在下行 HTTP 报文中, 命令浏览器存储一个字符串; 浏览器再访问同一个域的时候,将把这个字符串携带到上行 HTTP 请求中。第一次访问一个服务器,不可能携带 cookie。 必须是服务器得到这次请求, 在下行响应报头中,携带 cookie 信息,此后每一次浏览器往这个服务器发出的请求,都会 携带这个 cookie。

二、Cookie 特点

● cookie 保存在浏览器本地
● 正常设置的 cookie 是不加密的,用户可以自由看到;
● 用户可以删除 cookie,或者禁用它
● cookie 可以被篡改
● cookie 可以用于攻击
● cookie 存储量很小。未来实际上要被 localStorage 替代,但是后者 IE9 兼容。

三、Cookie 的使用

Express 中要使用 Cookie 的话,我们需要使用 cookie-parser 模块来实现

  1. 安装 cnpm instlal cookie-parser --save
  2. 引入
    var cookieParser = require(‘cookie-parser’);
  3. 设置中间件
    app.use(cookieParser());
  4. 设置
    cookie res.cookie(“name”,‘zhangsan’,{maxAge: 900000, httpOnly: true});
  5. 获取
    cookie req.cookies.name

Cookie 属性说明
在这里插入图片描述
设置 cookie 的几种方法

res.cookie('rememberme', '1', { maxAge: 900000, httpOnly: true }) 
res.cookie('name', 'tobi', { domain: '.example.com', path: '/admin', secure: true }); 
res.cookie('rememberme', '1', { expires: new Date(Date.now() + 900000), httpOnly: true });

获取 cookie

 req.cookies.name 

删除cookie

res.cookie('rememberme', '', { expires: new Date(0)}); 
res.cookie('username','zhangsan',{domain:'.ccc.com',maxAge:0,httpOnly:true});

四、加密 Cookie

  1. 配置中间件的时候需要传参
var cookieParser = require('cookie-parser'); 
app.use(cookieParser('123456'));
  1. 设置 cookie 的时候配置 signed 属性
res.cookie('userinfo','hahaha',{domain:'.ccc.com',maxAge:900000,httpOnly:true,signed:true}); 
  1. signedCookies 调用设置的 cookie
console.log(req.signedCookies)
const express = require("express")
const ejs = require("ejs")
const bodyParser = require("body-parser")
var cookieParser = require('cookie-parser')
const app = new express()

// 配置模板引擎
app.engine("html", ejs.__express)
app.set("view engine", "html")

// 配置静态web目录
app.use(express.static("static"))

// 配置第三方中间件
app.use(bodyParser.urlencoded({ extended: false }))
app.use(bodyParser.json())
// 配置cookieParser中间件
app.use(cookieParser("zep"))


app.get("/", (req, res)=> {
    // 设置cookie 如果cookie没有过期的话,关闭浏览器后重新打开,cookie仍然还在,不会被销毁
    res.cookie("username", "张三", {
        maxAge: 1000*60*60,
        signed: true
    })
    res.send("首页")
})

app.get("/article", (req, res) => {
    // 获取cookie
    let username = req.cookies.username
    console.log(username)
    res.send("新闻页面--" + username)
})

app.get("/user", (req, res) => {
    // 获取加密的cookie
    let username = req.signedCookies.username
    res.send("用户页面--" + username)
})

app.get("/login", (req, res)=> {
    console.log(req.query)
    res.render("login.html",{})
})

app.post("/doLogin", (req, res)=> {
    var body = req.body
    console.log(body)
    res.send("执行提交")
})



app.listen(3000)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值