gpt4 book ai didi

python - 两个 session key Flask 应用程序,很奇怪

转载 作者:行者123 更新时间:2023-12-01 04:19:22 25 4
gpt4 key购买 nike

SESSION_KEY="IDOGN2HHO43NjIVhrIe3i8mrrYtwQL3KsmBmt9En0N6G1n84b8Y1ddb+bGfcHqluL3gYwmkHxf/YiE8tQqTtXA=="; session =eyJfcGVybWFuZW50Ijp0cnVlfQ.CTXHug.DBJdQAKPKf2YiQGGTbiDW6DTEmi

从我的标题中可以明显看出,我的 Flask 应用程序正在设置两个 cookie。我无法理解这种行为。请在下面找到我的 flask 代码片段。

from flask import Flask, session, jsonify, request, make_response, Response
from base64 import b64encode
import os, dbConnect
from datetime import datetime, timedelta
import json

app = Flask(__name__)
app.config['PROPAGATE_EXCEPTIONS'] = True
app.secret_key = 'A0Zr98j/3yX R~XHH!jmN]LWX/,?RT'

conn = dbConnect.connect()
curs=conn.cursor()

@app.route("/py/commandSend", methods=['POST'])
def reverse():
data = {'a': 10, 'b': [{'c': False, 'd': False}, None]}
return json.dumps(data)


@app.route("/py/session", methods=['POST'])
def application():
now = datetime.now()
token = b64encode(os.urandom(64)).decode('utf-8')
expiryTime = now + timedelta(0, 450)
curs.execute("""INSERT INTO sessions (session_id, session_expiry, ip_address) VALUES (%s, %s ,%s) """,(token, expiryTime, request.environ["REMOTE_ADDR"]))
conn.commit()
response = make_response()
response.set_cookie('SESSION_KEY',token)
session.permanent = True
return response

@app.route("/py/getClientIP", methods=['POST'])
def getClientIP():
data = {}
data['client_ip'] = request.environ["REMOTE_ADDR"]
js = json.dumps(data)
resp = Response(js, status=200, mimetype='application/json')
print(request.environ['HTTP_COOKIE'])

return resp

@app.route("/py/sessionClose", methods=['POST'])
def sessionClose():
curs.execute("DELETE FROM sessions")
conn.commit()
return 'Done'

if __name__ == "__main__":
app.run()

甚至 chrome 开发者工具网络选项卡也显示生成了两个 cookie,这真的很奇怪,无法找到解决方案。如有帮助,我们将不胜感激。

最佳答案

根据您在此处编写的代码,您的 Flask 应用程序设置两个 cookie 是预期行为。我来解释一下:

在 Flask 中,您可以使用 session 导入向用户 session 添加一些内容:

import session
session['username'] = michael

现在,在用户session cookie中将有值username=michael(解密后)。

我认为通过调用 session.permanent = true 您会导致创建一个相对空白的 session cookie。

将内容存储在 flask 中的 cookie 中的另一种方法是使用 response.set_cookie:

response = make_response()
response.set_cookie('SESSION_KEY',token)
return response

这将创建一个名为 SESSION_KEY 的 cookie,其值为 token。这就是您看到的第二个 cookie 的来源。

这意味着 SESSION_KEY 未加密,因为它不是 Flask 管理的 session 。我假设您想保护此 SESSION_KEY,因此您应该像这样重写代码:

@app.route("/py/session", methods=['POST'])
def application():
now = datetime.now()
token = b64encode(os.urandom(64)).decode('utf-8')
expiryTime = now + timedelta(0, 450)
curs.execute("""INSERT INTO sessions (session_id, session_expiry, ip_address) VALUES (%s, %s ,%s) """,(token, expiryTime, request.environ["REMOTE_ADDR"]))
conn.commit()
session['SESSION_KEY'] = token
session.permanent = True

这会将您的 SESSION_KEY 存储在加密的 session cookie 中。

关于python - 两个 session key Flask 应用程序,很奇怪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33891037/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com