nunjucks基础3cookie与session(晓舟报告笔记)

网站服务器程序可以在浏览器中写入cookie,然后浏览器再次访问这个网站时,就会带着这个cookie。

const router = require("koa-router")();
const Koa = require("koa");
const nunjucks = require("nunjucks");
const views = require("koa-views");
const app = new Koa();
app.use(views(__dirname + '/views', {
    map: { html: 'nunjucks' }
}));

router.get("/", async ctx => {
    ctx.cookies.set("username", "xiaoming");
    ctx.body = "hello cookie";
})

app.use(router.routes())
app.listen(3000, () => {
    console.log("server is running");
})

可以在chrome调试工具中的network选项卡查看cookie内容

写入cookie之后,这个浏览器再次访问这个网站的任何一个页面,都会带着这个cookie。

通过maxAge可以设置cookie过期的毫秒数,实例代码如下所示

ctx.cookies.set("username","xiaoming",{
    maxAge:5000 //过期时间设置为五秒
})

获取cookie(cookie以key-value形式记录在客户端(浏览器))

router.get("/images", async ctx => {
    let usr = ctx.cookies.get("username");
    ctx.body = usr;
})

记录网页访问次数
利用cookie,可以记录客户端访问浏览器的次数,实例代码如下所示:

router.get("/count", async ctx => {
    let count = ctx.cookies.get("count");
    if (count > 0) {
        count = ++count;
        ctx.cookies.set("count", count, {
            maxAge: 2000
        });
    } else {
        count = 1;
        ctx.cookies.set("count", 1);
    }
    ctx.body = count
})

利用cookie在客户端存储数据是完全透明的,如果存储一些用户信息,会导致很严重的安全问题,所以为了记录用户的登录状态,需要使用cookie与session结合的方式。

这个加密密钥就是我们给客户端的磁卡,这里随便设什么内容,但是一定要有。
要不然会 Error: .keys required for signed cookies
人家官方文档里面就有,你凭什么没有。

const session = require("koa-session");
//加密的密钥,服务器通过加密的cookie获取session
app.keys = ['secret'];
app.use(session({
    maxAge:2000,
},app))

router.get("/session", async ctx => {
    if(ctx.session.count>0){
        ctx.session.count = ++ctx.session.count;
    }else{
        ctx.session.count = 1
    }
    ctx.body = ctx.session.count
})

给session设置一个count属性,可以直接通过赋值的方式

ctx.session.count = 0;

获取也可以使用相同的方法

let count = ctx.session.count

登录验证设计
首页:任何人都可以访问
登录页:提供表单,用户可以通过表单输入登录信息。
视频页:登录成功后可查看,并提供注销功能。

const router = require("koa-router")();
const Koa = require("koa");
const nunjucks = require("nunjucks");
const views = require("koa-views");
const session = require("koa-session")
const parser = require("koa-parser")
const app = new Koa();
app.use(parser());
app.keys = ["123456"]
app.use(session({
    maxAge: 3 * 1000
}, app))

app.use(views(__dirname + '/views', {
    map: { html: 'nunjucks' }
}));


//首页 任何人都可以访问
router.get("/", async ctx => {
    await ctx.render("home.html")
})

//登录页 任何
router.get("/login", async ctx => {
    await ctx.render("login.html")
})

//内容页 登陆后访问
router.get("/list", async ctx => {
    if (ctx.session.user) {
        await ctx.render("list.html")
    } else {
        ctx.redirect("/")
    }

})

router.post("/login", async ctx => {
    let username = ctx.request.body.username;
    let password = ctx.request.body.password;
    if (username === "admin" && password === "123456") {
        ctx.session.user = "admin"
        //重定向
        ctx.redirect("list")
    } else {
        ctx.redirect("/")
    }
})

router.get("/logout", async ctx => {
    ctx.session.user = "";
    ctx.redirect("/")
})

app.use(router.routes())

app.listen(3000, () => {
    console.log("server is running");
})

学习视频:
https://www.bilibili.com/video/BV1zf4y1r711?p=9&share_source=copy_web

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值