nodejs之koa2 -- cookie和session的使用

nodejs之koa2 – cookie和session的使用

cookie

以前只是在前端浏览器上对cookie进行操作,很少在服务端使用cookie,
所以就会有一个错觉:cookie只能在客户端利用js设置读取删除等,但事实上很多的cookie是由服务端在response的headers里面写进去的,
今天就记录一下cookie在服务端的使用。比如koa记录cookie,非常简单

首先我们先定义一个cookie的config,然后使用cookies.set方法就可以直接设置cookie了

const cookieConfig = {
    maxAge: 1000 * 60 * 3,            // 一个数字表示从 Date.now() 得到的毫秒数
    expires: new Date('2019-03-08'),        // 过期的 Date,如不设置就和session类似,关闭浏览器此cookie失效
    path: '/',                  // 路径, 默认是'/'
    domain: 'localhost',                // 域名
    secure: false,              // 安全 cookie   默认false,设置成true表示只有 https可以访问
    httpOnly: false,            // 是否只是服务器可访问 cookie, 默认是 true
    overwrite: true             // 一个布尔值,表示是否覆盖以前设置的同名的 cookie (默认是 false). 如果是 true, 在同一个请求中设置相同名称的所有 Cookie(不管路径或域)是否在设置此Cookie 时从 Set-Cookie 标头中过滤掉。
}

// 设置cookie
router.get('/setCookie',async (ctx,next) => {
    ctx.cookies.set('ceshi', 'ceshishi', {cookieConfig});
    ctx.response.body = {status: 200, msg: '设置成功'};
});

// 获取cookie ctx.cookie.get(key);
router.get('/getCookie',async (ctx,next) => {
    let cookies = ctx.cookies.get('ceshi'});
    ctx.response.body = {status: 200, cookie: cookies};
});

很简单的,我们在前台发起一个设置cookie的请求,例子如下

<button onclick="setCookie()">点击测试设置cookie方法</button>

var setCookie = () => {
    $.ajax({
        type:'GET',
        url:'/setCookie',
        dataType:'json',
        success(data){
            console.log(data);
        },
        error (err){
            console.log(err);
        }
    });
};

请求之后,查看我们浏览器控制台

koa2

删除cookie的话就跟前台一样,设置cookie值为空,并且设置maxAge为0,或者设置cookie的过期时间,让cookie过期就好了,具体操作如下

// 清除cookie
router.get('/delCookie',async (ctx,next) => {
    ctx.cookies.set('ceshi','',{maxAge:0}});
    ctx.response.body = {status: 200, msg:'cookie删除成功'};
});

session

session 是另一种不同于cookie的记录客户端状态的机制,不同的是cookie是保存在客户端浏览器中,而session则是可以保存在服务器上,
session会在一定时间内保存在服务器上,应当考虑到当访问增多,会比较占用服务器的性能,所以如果应用访问较多的话可以使用cookie。

koa使用session的话会使用到koa-session中间件,使用如下

1.安装

npm install koa-session --save

2.配置 session

const session = require('koa-session');

// 使用session
app.keys = ['secret'];      
const CONFIG = {
    key: 'koa:sess',        // cookie key (默认koa:sess)
    maxAge: 86400000,       // cookie的过期时间,毫秒,默认为1天
    overwrite: true,        // 是否覆盖    (默认default true)
    httpOnly: false,        // cookie是否只有服务器端可以访问,默认为true
    signed: true,           // 签名默认true
    rolling: false,         // 在每次请求时强行设置cookie,这将重置cookie过期时间(默认:false)
    renew: false,           // (boolean) 会话即将到期时,续订会话
};
app.use(session(CONFIG, app));

3.session使用

// 保存session
router.get('/setSession', async (ctx, next) => {
    try {
        ctx.session.username = ctx.query.name;
        ctx.session.age = ctx.query.age;
        ctx.body = {status: 200, msg: 'session设置成功'};
    } catch (e) {
        ctx.body = {status: 200, msg: 'session设置失败', err: e};
    }
});
// 获取session
router.get('/getSession', async (ctx, next) => {
    try {
        let name = ctx.session.username,
            age = ctx.session.age;
        ctx.body = {
            status: 200,
            msg: 'session获取成功',
            name: name,
            age: age
        };    
    } catch (e) {
        ctx.body = {
            status: 200,
            msg: 'session获取失败',
            err: e
        };
    }
});    

至此,koa session和cookie介绍完毕,可以愉快的写代码了,下一篇,小弟就记录一下如何使用koa快速构建一个项目。

本文纯手打,有不当之处请留言!如果对小伙伴们有帮助的话,点赞啊,谢谢!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值