路由拦截的意义 根据标识(session)来判断用户是否是合法用户,为了保证这个表示的安全性,这个标识可由服务端生成,并且客户端不能随意修改,每次客户端在请求接口前,必须要查询session的合法性。 session与路由拦截 session:存储在cookie中的一种识别用户身份和行为的有效信息。 所谓拦截就是在用户指定行为前,进行session校验,判断是否是合法用户 常用的常用的拦截有三种:

路由拦截的意义

根据标识(session)来判断用户是否是合法用户,为了保证这个表示的安全性,这个标识可由服务端生成,并且客户端不能随意修改,每次客户端在请求接口前,必须要查询session的合法性。

session与路由拦截

  1. session:存储在cookie中的一种识别用户身份和行为的有效信息。
  2. 所谓拦截就是在用户指定行为前,进行session校验,判断是否是合法用户
  3. 常用的常用的拦截有三种:1.session 2.token 3.token+session

使用koa-session设置session

const session = require('koa-session');
const Koa = require('koa');
const Router = require('koa-router');
const app = new Koa();

app.keys = ['some secret hurr'];

const CONFIG = {
  key: 'koa:sess', 
  maxAge: 86400000, //这个是确定cookie的有效期,默认是一天。
  overwrite: true, 
  httpOnly: true, //表示是否可以通过javascript来修改,设成true会更加安全
  signed: true, //cookie的安全性 会自动给cookie加上一个sha256的签名
  rolling: false, //这两个都是涉及到cookie有效期的更新策
  renew: false, // 这两个都是涉及到cookie有效期的更新策
};
app.use(session(CONFIG, app));
let home = new Router();
// 每次在get请求前进行判断
home.get("/",async (ctx)=>{
  if (ctx.path === '/favicon.ico') return;
  let n = ctx.session.views || 0;
  ctx.session.views = ++n;
  if(n==17){
    throw new Error({
      success:1
    })
  }else{
    ctx.body ={
      success:0
    };
  }
})
const router = new Router();
router.use("/",home.routes())
app.use(router.routes());
app.listen(1111);

客户端获取session是否合法

axios.interceptors.response.use(
  response => {
    return response;
  },
  error => {
    if (error.response.success === 1) {
        router.push('/login');
    }
    return Promise.reject(error);
  }
)

总结

  • session这种是由服务端生成的,通过cookie传输,过期时间由服务器设定,每次 请求前都要检测session是否存在,存在跨域的问题

暂无评论