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

如何实现Django两个应用登录状态自动同步?

Django多应用会话共享实现方案(跨端口自动同步登录)

针对你有两个共享同一数据库的Django应用(app1运行在localhost:8000,app2运行在localhost:8010),要实现登录其中一个应用后自动同步登录另一个的需求,用Redis做会话存储是最优方案,具体步骤如下:

一、部署Redis服务

  • 安装Redis:根据操作系统选择对应方式(Ubuntu用sudo apt install redis-server,CentOS用sudo yum install redis,Windows可下载官方安装包)。
  • 启动Redis服务并验证:运行redis-cli ping,返回PONG则服务正常可用。

二、配置两个Django应用

两个应用的配置必须完全一致,否则会话无法互通。

1. 安装依赖

在两个应用的虚拟环境中执行:

pip install redis django-redis

2. 修改settings.py核心配置

(1)统一SECRET_KEY

Django的会话签名依赖此密钥,两个应用的SECRET_KEY必须完全相同,否则跨应用的会话会被判定为无效。

(2)配置Redis缓存

替换默认缓存配置,使用Redis作为缓存后端:

CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379/1",  # 两个应用必须使用同一个Redis数据库实例
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
            # 生产环境建议添加密码:"PASSWORD": "your_redis_password",
        }
    }
}

(3)切换会话引擎到Redis

替换原来的数据库会话存储,改用Redis:

# 替换默认的django.contrib.sessions.backends.db
SESSION_ENGINE = "django.contrib.sessions.backends.cache"
SESSION_CACHE_ALIAS = "default"  # 指定使用上面配置的default缓存

(4)配置跨端口Cookie参数

因为两个应用同属localhost域名的不同端口,需要让Cookie能被两个端口共享:

SESSION_COOKIE_DOMAIN = ".localhost"  # 点前缀表示允许同一域名下的所有端口共享Cookie
SESSION_COOKIE_NAME = "sessionid"  # 保持默认值,两个应用必须一致
SESSION_COOKIE_PATH = "/"
SESSION_COOKIE_SECURE = False  # 本地测试禁用HTTPS,生产环境启用HTTPS后设为True
SESSION_COOKIE_HTTPONLY = True  # 提升安全性,防止前端JS访问Cookie

三、验证效果

  1. 分别启动两个应用:python manage.py runserver 8000和python manage.py runserver 8010。
  2. 在localhost:8000登录用户,然后打开localhost:8010,检查request.user.is_authenticated是否为True,若为真则说明会话共享生效。

关键注意点

  • 两个应用必须共享同一用户数据库(你已满足此条件),否则无法读取用户信息。
  • Redis服务需保持稳定,生产环境建议配置持久化(RDB或AOF),避免重启后会话丢失。
  • 若生产环境使用不同域名,需将SESSION_COOKIE_DOMAIN设为共同的父域名(比如.example.com)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 04:27:14