关于flask_session get 为None的问题

当使用Vue前端和Flask后端开发时,遇到登录后设置的flask_session在其他接口获取为None的问题,主要是由于跨域导致cookie被阻止。解决方法包括:后台启用Flask-CORS并设置`supports_credentials=True`,前端axios设置`withCredentials=true`和`xsrfCookieName=session:`。此外,注意域名不同可能导致SameSite限制,可以使用Vue代理配置来规避。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于flask_session get 为None的问题


最近新开发一个工程,前端为vue,后端是flask,调用登录接口登录成功后,设置好flask_session,再调用其他接口,session.get(‘key’)获取到的值为None,经过研究,总结如下:

问题描述:登录接口设置session后,其他接口获取到的session为None
解决方案:问题主要由cookie被阻止引起,flask_session通过cookie中的值判断是否同一会话,在跨域访问时,cookie被阻止,导致无法获取会话信息,需要关注以下几点:

1.产生跨域时,后台需要允许跨域访问,对于flask,即为如下配置:

# 全局跨域
from flask import Flask
from flask_cors import CORS

gl.app = Flask('terminal-release')
# 此处配合前台,设置supports_credentials为True,意味着允许验证信息传输
CORS(gl.app, supports_credentials=True)
# 单个接口跨域
from flask_cors import cross_origin

@cross_origin()
def get_user_file_release():
    pass

2.前端需要允许验证信息传输,并设置会话区分cookie

// 在main.js中设置
import axios from "axios";

axios.defaults.withCredentials = true; // 发送凭据
axios.defaults.xsrfCookieName = 'session:'; // 以‘session:’识别会话

关于xsrfCookieName设置,此处意味着使用cookie中key为session:的cookie进行会话区分,这也是flask_session判断是否是同一会话的关键,此处的session:是flask_session配置SESSION_KEY_PREFIX的默认值
3.注意:以上方法只适用于域名相同,端口号不同的情况,域名不同时,浏览器SameSite设置会阻止cookie传输,上述方法无效:
newbing对SameSite的解释
4.域名不同时可以使用vue代理配置,此时不需要进行1,2步的配置(注意:如果你使用npm serve默认配置,即localhost:8080访问前端,此方法目标地址不能是localhost,可以写127.0.0.1

const {defineConfig} = require('@vue/cli-service')
module.exports = defineConfig({
  transpileDependencies: true,  devServer: {
    proxy: {
      '/api': {
        target: 'http://ip:port',
        changeOrigin: true
      }
    }
  }
})
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值