Node.js 学习笔记13|express(七)cookies、session

cookie

HTTP协议是一个无状态的协议,服务器无法区分请求是否发送自同一个客户端。cookie是HTTP协议中用来解决无状态问题的技术。cookie的本质是一个头,服务器以响应头的形式将cookie发送给客户端,客户端收到以后会将其存储,并在下一次向服务器发送请求时将其传回,这样服务器就可以根据cookie来识别出客户端了。

cookie是服务器创建的 发给客户端

使用步骤:

            1.安装 cookie-parser

            2.引入 const cookieParser = require("cookie-parser")

            3.设置为中间件 app.use(cookieParser())

app.post("/login", (req,res) => {
    const {username, password} = req.body
    if(username === "admin" && password === "123"){
        // res.send("登录成功")
        //将用户名放入cookie
        res.cookie("username",username)
        res.redirect("/students/list")
    }else{
        res.send("错误")
    }
})

cookie是有有效期的,默认情况下 cookie 的有效期就是一次会话(session)。会话指一次从打开到关闭浏览器的过程。


cookie属性

app.get("/set", (req,res) => {
    res.cookie("name","jj",{
        //配置对象
        // expires:new Date(2023,11,7)
        //maxAge 用来设置cookie有效时间,单位是毫秒
        maxAge:1000 * 60 * 60 * 24 * 30
    })
    res.send("设置cookies")
})

删除cookie

app.get("/delete-cookie", (req,res) => {
    //cookie一旦发送给浏览器就不能再修改了
    //但是可以通过发送新的同名cookie来替换旧cookie,从而达到修改的目的
    res.cookie("name","",{
        maxAge:0
    })
    res.send("删除cookie")
})

 读取cookie

app.get("/get", (req,res) => {
    const name = req.cookies.name
    console.log(name);

    res.send("读取cookies")
})

session

cookie存在一些不足:cookie是由浏览器创建,浏览器保存。每次浏览器访问服务器时都需要将cookie发回,这就导致不能在cookie存放较多的数据。并且cookie是直接存储在客户端,容易被篡改盗用。使用cookie时一定不会在cookie存储敏感数据。为了解决cookie不足,希望可以将用户的数据统一存储在服务器中。每一个用户的数据都有一个对应的id,我们只需通过cookie将id发送给浏览器,浏览器只需每次访问将id发回,即可读取到服务器中存储的数据,这个技术称之为session(会话)。

        session是服务器中的一个对象,这个对象用来存储用户的数据。每一个session对象都有一个唯一的id,id会通过cookie的形式发送给客户端。客户端每次访问时只需将存储有id的cookie发回即可获取它在服务器中存储的数据。在express可以通过 express-session 组件来实现

使用步骤:

1.安装        yarn add express-session

2.引入        const session = require()

3.设置为中间件        app.use(session({...}))

app.get("/set", (req,res) => {
    req.session.username = "xx"
    res.send("查看session")
})

app.get("/get", (req,res) => {
    const username = req.session.username
    console.log(username);
    res.send("读取session")
})

//使用session为页面操作设置权限
app.post("/login", (req,res) => {
    const {username, password} = req.body
    if(username === "admin" && password === "123"){
        req.session.loginUser = username
        res.redirect("/students/list")
    }else{
        res.send("错误")
    }
})

session本地存储

session失效的情况:第一种,浏览器cookie没有了;第二种,服务器中的session对象没有了。

express-session默认是将session存储在内存中,所以服务器一旦重启session会自动重置。所以使用session时通常会对session进行一个持久化的操作(写到文件或数据库)。

将session存储到本地文件:

        引入中间件 session-file-store

        使用步骤

            1.安装        yarn add session-file-store

            2.引入        const FileStore = require("session-file-store")(session)

app.use(session({
    store:new FileStore({
        //path用来指定session本地文件路径
        path:path.resolve(__dirname,"./sessions"),
        //secret:"hello",
        //指定session有效时间
        // ttl:10,
        //默认情况下,fileStore会每间隔一个小时,清除一次本地session对象
        // reapInterval:10
    }),
    secret:"hello"
}))

//使session失效
app.get("/logout", (req,res) => {
    req.session.destroy(() => {
        res.redirect("/")
    })
    
})

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值