我不明白为什么我的会话变量没有转移到其他烧瓶路线。我相信我已正确设置它,但我对此代码有问题:
from flask import Flask, request, jsonify, redirect, url_for, render_template, session
from flask_session import Session
import requests
import os
import json
app = Flask(__name__)
app.secret_key = os.urandom(24)
# Session setup
SESSION_TYPE = 'filesystem'
app.config.from_object(__name__)
Session(app)
@app.route('/')
def index():
shop_origin = session.get('shop_origin', 'Shop Origin In Session Not Set')
print("index shop_origin is equal to: %s" % shop_origin, flush=True)
if not shop_origin:
session['have_shop_info_in_session'] = False
if 'have_shop_info_in_session' in session:
print("have_shop_info_in_session is equal to: %s" % session['have_shop_info_in_session'], flush=True)
if 'have_shop_info_in_session' in session and session['have_shop_info_in_session']:
shop_info = session.get('shop_info', 'No Shop Info Found')
return render_template('app_interface.html')
else:
return render_template('fetch_shop_info.html')
@app.route('/set_shop_info', methods=['POST'])
def set_shop_info():
data = request.get_json()
shop_origin = data.get('shopOrigin')
if not shop_origin:
return jsonify({'error': 'Shop origin not provided'}), 400
session['shop_origin'] = shop_origin
print("Loaded session shop_origin: %s" % session.get('shop_origin'), flush=True)
session['have_shop_info_in_session'] = True # Set the flag to true
print("set_shop_info have_shop_info_in_session is equal to: %s" % session['have_shop_info_in_session'], flush=True)
return jsonify({'status': 'success'}), 200
当此代码运行时,我在日志中收到带有
Loaded session shop_origin: testing-store.myshopify.com
和 set_shop_info have_shop_info_in_session is equal to: True
的积极标志,但是一旦 fetch_shop_info.html
中的 Javascript 重定向到索引 Flask 路由,日志就会显示 index shop_origin is equal to: Shop Origin In Session Not Set
。
为什么变量没有传输到会话中的其他路由?浏览器中已启用 Cookie。
编辑:我尝试在不同的浏览器中运行代码,它似乎工作正常,所以问题必须出在我的浏览器(Brave 浏览器)上。我为 Shopify 关闭了 Brave Shields,我可以看到浏览器似乎正确存储了 cookie。我仍然不确定问题到底是什么,但我更接近弄清楚问题是什么了。
该代码在 Firefox 中可以正常运行,但在 Brave 浏览器中不能正常运行,因此问题出在浏览器上。我不知道这段代码的作用,但这似乎通过将其添加到我的代码顶部来使代码工作。 这是我找到解决方案的链接。
app.config.update(SESSION_COOKIE_SAMESITE="None", SESSION_COOKIE_SECURE=True)