一只特立独行的猪 一只特立独行的🐷
一只特立独行的🐷
  • 主页
  • web开发
  • 博客笔记
  • 软件工具
  • 随笔杂谈
  • 文章归档
  • 影音欣赏
  • 我的资源
  • 关于我
  • wechat_fill

nodejs(koa2)+vue2前后端分离项目解决session跨域丢失问题

  • 2018-01-09
  • Web开发
  • 评论(0)

博主前端攻城狮一枚,熟悉nodejs,平时喜欢自己写一个简单的全栈项目,后端框架(koa2),此方法适用所有前后端分离项目session失效问题。
koa2用的session组件是koa-session-minimal&&koa-mysql-session,存入了mysql,跨域问题用的是koa-cors
在前后端项目分离项目中,session会丢失,原因是,服务端无法跨域写入cookie,之前的解决办法是,在登录的时候,把seesionid在接口处理中以参数的形式返回给前端,前端在请求的时候再带回来。这么做,虽然解决了问题,但是需要改源码包,而且操作不方便,容易出现问题。查找资料,也没找到一个比较合理的解决方法。
后来发现跨域写cookie是可以解决的,结合项目,处理了一下,果然可以解决,网上说这么处理不安全,暂时没发现好的方法,先这么处理吧,记录一下:

koa处理:

app.use(cors({
    origin: function (ctx) {
        return ctx.header.origin 
    },
    credentials:true
}))

要点:
1. origin:一定要设置具体的域名,不能设置为'*'
2. credentials:true

前端处理:在ajax里面加上withCredentials:true,

eg:我二次封装vue的axios

post(url, data) {
    return axios({
        method: 'post',
        url: base_url + url,
        data: JSON.stringify(data),
        timeout: 30000,
        headers: {
        'X-Requested-With': 'XMLHttpRequest',
        'Content-Type': 'application/json; charset=UTF-8'
        },
        withCredentials:true
    }).then(checkStatus).then(checkCode)
},

要点: withCredentials:true

至此,应该已经解决前后端分离项目session跨域的问题了

Powered by Wordpress, Theme by Wing-magic
©2023 一只特立独行的🐷 All rights reserved
陕ICP备15006707号-5