You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django会话无法持久化:Postman正常但React前端异常求助

问题排查与解决方案

一、跨域请求未携带Session Cookie(核心问题)

Postman会自动保存并携带Cookie,但React前端默认不会在跨域请求中传递Cookie,这就是为什么前端调用时session为空的关键原因。

前端调整

在你的请求工具(比如axios)里开启withCredentials:

// 全局配置示例(axios)
import axios from 'axios';

axios.defaults.withCredentials = true;

// 单个请求配置示例
axios.post('/api/add_core_user_details', 你的请求数据, {
  withCredentials: true
});

Django后端CORS配置

确保django-cors-headers的配置允许携带Cookie:

  1. 没装依赖先装:pip install django-cors-headers
  2. 修改settings.py:
INSTALLED_APPS = [
    # ...其他已有的应用
    'corsheaders',
]

MIDDLEWARE = [
    'corsheaders.middleware.CorsMiddleware',  # 必须放在CommonMiddleware前面
    'django.middleware.common.CommonMiddleware',
    # ...其他中间件
]

# 这里填你的React前端地址,不能用*,否则无法携带Cookie
CORS_ALLOWED_ORIGINS = [
    "http://localhost:3000",
    # 线上环境的前端地址也可以加在这里
]

# 允许跨域携带Cookie
CORS_ALLOW_CREDENTIALS = True

二、Admin看不到Session表的问题

Admin里看不到session表,要么是你没使用数据库存储session,要么是没执行迁移生成表。

检查Session存储配置

看settings.py里的SESSION_ENGINE:

  • 如果是默认的django.contrib.sessions.backends.db,执行迁移生成表:
python manage.py migrate

执行后django_session表会被创建,同时确保django.contrib.sessions在INSTALLED_APPS里,Admin就能看到session数据了。

  • 如果用的是缓存类存储引擎(比如django.contrib.sessions.backends.cache),数据存在缓存里,Admin自然看不到。要是需要在Admin查看session,改成数据库存储即可。

三、接口逻辑的细节检查

  1. 确保create_login里写入session的逻辑没问题:
def create_login(request):
    # ...你的用户创建逻辑
    user_id = str(user_doc._id)  # MongoDB的ObjectId要转成字符串存session
    request.session['user_id'] = user_id
    request.session.save()  # 显式保存session,避免异步场景下丢失
    # ...返回响应
  1. 在add_core_user_details里先判断session是否存在,避免KeyError:
def add_core_user_details(request):
    user_id = request.session.get('user_id')
    if not user_id:
        return JsonResponse({'error': '未获取到用户身份'}, status=401)
    # ...后续业务逻辑

四、验证步骤

  1. 重启Django服务和React应用,确保配置生效。
  2. 打开浏览器开发者工具的Application标签,检查Cookie里有没有Django的sessionid,并且请求时是否携带了这个Cookie。

内容的提问来源于stack exchange,提问作者ben_11

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 20:15:27