作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的 Flask API 中,我试图让 session 保持永久状态,以便即使在浏览器关闭后它仍然存在。我的前端是用 React 编写的,并使用 Fetch API 发出请求。但是,在测试了我到目前为止所拥有的之后,它似乎不起作用。我的代码(省略了一些不相关的数据库内容):
@bp.route('/login', methods=('POST',))
def login():
...
error=None
res = {}
db = get_db()
cursor = db.cursor(dictionary=True)
...
user = cursor.fetchone()
...
if error is None:
session.clear()
session.permanent = True
session['userID'] = user['id']
current_app.logger.debug(session['userID'])
res['actionSuccess']= True
else:
res['actionSuccess'] = False
res['error'] = error
return jsonify(res)
@bp.route('/init', methods=('GET',))
def init():
userID = session.get('userID')
if userID is None:
res = {"signedIn": False}
else:
res = {"signedIn": True, "username": userID}
return jsonify(res)
最佳答案
经过大量研究,找出 session 不起作用的原因! Flask session 本质上是 cookie,我使用 Fetch API 来执行 CORS 操作。默认情况下,Fetch() 不允许接收或发送 cookie,必须进行配置才能使用 Flask session 。
在我的 React.js 客户端上,我通过为“凭据”设置“包含”来做到这一点:
fetch(url, {
method: 'POST',
mode: 'cors',
body: JSON.stringify(loginObj),
credentials: 'include',
headers: {
'Content-Type': 'application/json'
}
})
.then(res => res.json())
...
@bp.route('/login', methods=('POST','OPTIONS'))
def login():
if request.method == 'OPTIONS':
resp = Response()
resp.headers['Access-Control-Allow-Origin'] = clientUrl
resp.headers['Access-Control-Allow-Credentials'] = 'true'
resp.headers['Access-Control-Allow-Headers'] = "Content-Type"
return resp
else:
'''
use session for something
'''
res['actionSuccess'] = False
js = json.dumps(res)
resp = Response(js, status=200, mimetype='application/json')
resp.headers['Access-Control-Allow-Origin'] = clientUrl
resp.headers['Access-Control-Allow-Credentials'] = 'true'
resp.headers['Access-Control-Allow-Headers'] = "Content-Type"
return resp
关于cookies - Flask Session() 对象不是永久性的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52435524/
我们遇到了与此类似的问题 old question 。然而,我们的设置有点不同。例如,心跳应该已经存在,因为我们有 ActiveMQ 的默认 InactivityMonitor。 我们有一个使用嵌入式
我在 Internet Explorer 中遇到持久性 cookie 的问题,即我可以设置 cookie,但无法使它们持久化。我使用的是 Internet Explorer 11,并尝试了“Inter
我使用 nginx 作为前端服务器,使用 uwsgi 作为 python 应用程序。大约一天一次,我的一个应用程序开始下降。在日志中我可以看到不同的 mysql 错误。例如: sqlalchemy.e
我是一名优秀的程序员,十分优秀!