SESSION_KEY = “IDOGN2HHO43NjIVhrIe3i8mrrYtwQL3KsmBmt9En0N6G1n84b8Y1ddb + bGfcHqluL3gYwmkHxf / YiE8tQqTtXA ==”;会话= eyJfcGVybWFuZW50Ijp0cnVlfQ.CTXHug.DBJdQAKPKf2YiQGGTbiDW6DTEmI
从我的标题中可以看出,我的Flask应用程序设置了两个cookie。我无法理解这种行为。 请在下面找到我的烧瓶代码片段。
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,这非常奇怪,无法找到解决方案。帮助将不胜感激。
答案 0 :(得分:2)
根据您在此处编写的代码,您的烧瓶应用设置两个cookie是预期的行为。我会解释一下:
在烧瓶中,您可以使用会话导入向用户会话添加内容:
import session
session['username'] = michael
现在,在用户session
Cookie中,将有值username=michael
(解密后)。
我认为通过调用session.permanent = true
会导致创建一个相对空白的session
Cookie。
您可以使用response.set_cookie
:
response = make_response()
response.set_cookie('SESSION_KEY',token)
return response
这是创建名为SESSION_KEY
的Cookie,其值为token
。这就是你看到的第二个cookie来自哪里。
这意味着SESSION_KEY
未加密,因为它不是烧瓶管理的会话。我假设您要保护此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
存储在加密的会话Cookie中。