同一服务器部署两个Flask应用的登录登出功能异常解决
解决同一服务器下两个Flask应用的flask-login会话冲突问题
问题根源是两个Flask应用默认使用相同的session cookie名称(session),浏览器会将同一个cookie发送给两个应用,导致会话状态互相干扰,哪怕设置了不同的SECRET_KEY也无法解决核心的cookie混淆问题。
以下是具体解决步骤:
给每个应用配置唯一的session cookie名称:
在Flask应用的配置中添加不同的SESSION_COOKIE_NAME,比如:# 第一个应用 app.config['SESSION_COOKIE_NAME'] = 'app1_session' # 第二个应用 app.config['SESSION_COOKIE_NAME'] = 'app2_session'针对Nginx代理的路径/域名场景补充配置:
- 如果两个应用通过同域名的不同路径访问(如
yourdomain.com/app1和yourdomain.com/app2),需分别设置SESSION_COOKIE_PATH,限定cookie的作用路径:# 第一个应用 app.config['SESSION_COOKIE_PATH'] = '/app1' # 第二个应用 app.config['SESSION_COOKIE_PATH'] = '/app2' - 如果是不同子域名访问(如
app1.yourdomain.com和app2.yourdomain.com),明确设置SESSION_COOKIE_DOMAIN为各自的子域名:# 第一个应用 app.config['SESSION_COOKIE_DOMAIN'] = 'app1.yourdomain.com' # 第二个应用 app.config['SESSION_COOKIE_DOMAIN'] = 'app2.yourdomain.com'
- 如果两个应用通过同域名的不同路径访问(如
再次确认两个应用的
SECRET_KEY完全不同:
虽然这不是当前冲突的核心原因,但它是会话加密的基础,必须保证每个应用使用独立的密钥,比如:# 第一个应用 app.config['SECRET_KEY'] = 'your_unique_secret_key_for_app1' # 第二个应用 app.config['SECRET_KEY'] = 'your_unique_secret_key_for_app2'
完成以上配置后,两个应用的session cookie会被浏览器区分开,登录、登出操作将各自独立,不会互相干扰。
内容的提问来源于stack exchange,提问作者lqjun
相关产品推荐
相关产品推荐

