koa-session 识别用户及应用

解决的问题:

因为http是无状态的,所以服务器不知道是哪个客户端在请求服务。koa-session 通过生成不同的cookie到浏览器端,后续请求的请求头会携带这些cookie信息,来实现识别客户端。常用于登陆模块。

 

案例:

const Koa = require('koa');
const Session = require('koa-session');
/**
 * 用于配合signed属性的签名
 * */
const session_signed_key = ['some secret key'];
const session_config = {
    key:'cookiename', // cookie的key
    maxAge: 8640000, // cookie 有效时长
    autoCommit: true, //自动提交的相应头,默认是true
    overwrite: true, // 是否允许重写,默认是true
    httpOnly: true, // 只允许http服务请求,那么通过程序(JS脚本、Applet等)将无法读取到Cookie信息,这样能有效的防止XSS攻击。  (默认 true)
    siged: true,//** 是否签名。(默认是 true) */
    rolling: true, //** 是否每次相应刷新session的有效期,默认为false
    renew: false, //是否在session快过期的时候刷新session的有效期,默认为false
}

const App = new Koa();
const session = Session(session_config,App);
App.keys = session_signed_key;

App.use(session);

App.use(ctx =>{
    const databaseUserName = 'testname';
    const databaseUserPasswd = 'testpw';

    if(ctx.path === '/favicon.ico'){return};
    console.log(ctx.session.logged)
    if(!ctx.session.logged){
        ctx.session.logged = false;
        let query = ctx.request.query;

        if(query.username && query.passwd){
            if(query.username === databaseUserName){
                if(query.passwd === databaseUserPasswd){
                    ctx.body = '登陆成功';
                    ctx.session.logged = true;
                }else{
                    ctx.body = '密码错误'
                }
            }else{
                ctx.body = "该用户不存在"
            }
        }else{
            ctx.body = '用户名或密码不存在'
        }

    }else{
        ctx.body = "已登陆"
    }
})

App.listen(3000);
console.log("Koa运行在:http://127.0.0.1:3000");

我们第一次访问  http://localhost:3000          ====> 返回 '用户名或密码不存在'

我们输入错误的账号密码: http://localhost:3000/?username=errorname&passwd=errorpw   ===》 ‘该用户不存在‘

我们输入正确的账号密码:http://localhost:3000/?username=testname&passwd=testpw   ====》 ‘登陆成功’

我们第二次访问:  http://localhost:3000     =====> 返回‘已登陆’,识别到客户端

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值