Flask版本:
>>> flask.__version__
'0.12.2'
我不想更新某个网址的到期时间 目前,我使用以下方法设置会话到期时间:
session.permanent = true
app.permanent_session_lifetime = timedelta(minutes=int(10))
我有一个状态页面,使用ajax方法每分钟自动刷新一次以获取数据 在这种情况下,我不想重置会话到期时间 有没有办法这样做?
修改
到目前为止我的代码:
from datetime import timedelta
from flask import Flask
from flask import session
APP = Flask(__name__, static_url_path='', static_folder='templates')
def create_user_session(user_accountid, auth_token):
session['token'] = auth_token
session['user_accountid'] = user_accountid
def update_session():
session.permanent = True
APP.permanent_session_lifetime = timedelta(minutes=10)
session.modified = True
@APP.route('/batch_status', methods=['GET'])
def view_status():
create_user_session(1, "****")
update_session()
return "Session Change"
@APP.route('/batch_status_json', methods=['GET'])
def retrieve_status():
return "Session No Change"
if __name__ == '__main__':
APP.secret_key = "My Precious Key"
APP.run(host='0.0.0.0', debug=True, port=8000)
我不想在batch_status_json
来电时更改会话到期时间,但会在调用时自动更改。
EDIT2:
monitor_controller.py:
from datetime import timedelta
from flask import Flask
from flask import session
from status import RETRIEVE_STATUS
APP = Flask(__name__, static_url_path='', static_folder='templates')
APP.register_blueprint(RETRIEVE_STATUS)
def create_user_session(user_accountid, auth_token):
session['token'] = auth_token
session['user_accountid'] = user_accountid
def update_session():
session.permanent = True
APP.permanent_session_lifetime = timedelta(minutes=10)
session.modified = True
@APP.route('/batch_status', methods=['GET'])
def view_status():
create_user_session(1, "****")
update_session()
return "Session Change"
if __name__ == '__main__':
APP.secret_key = "My Precious Key"
APP.run(host='0.0.0.0', debug=True, port=8000)
status.py:
from flask import Blueprint
RETRIEVE_STATUS = Blueprint('retrieve_status', __name__)
@RETRIEVE_STATUS.route('/batch_status_json', methods=['GET'])
def retrieve_status():
return "Session No Change"
答案 0 :(得分:3)
如果会话被标记为已修改或已设置SESSION_REFRESH_EACH_REQUEST
选项,则会设置Cookie。默认情况下,该选项为True。
在Flask配置中尝试设置
SESSION_REFRESH_EACH_REQUEST = False
来自文档:
SESSION_REFRESH_EACH_REQUEST
控制是否发送cookie session.permanent为true时的每个响应。发送cookie 每次(默认)都可以更可靠地保持会话 到期,但使用更多带宽。非常任会议不是 影响。
默认值:True
答案 1 :(得分:1)
修改强>
另一个选择是使用Blueprints
将您的终端分成不同的自治应用程序:
retrieve_status()
)方法。APP
:APP.register_blueprint(your_blue_print)
现在,您的retrieve_status()
方法与APP
方法是分开的,@before_request
在您调用时无法触发。
进一步阅读蓝图:
before_request
)我认为你有两个选择:
仅在视图中明确使用session.modified=True
:
from flask import session
def update_session():
session.permanent = True
app.permanent_session_lifetime = timedelta(minutes=10)
session.modified = True
@app.route('/batch_status', methods=['GET'])
def view_status():
...
Do stuff
...
update_session()
return "Session Change"
并删除before_request()
方法
修改before_request()
方法以排除retrieve_status
端点:
@APP.before_request
def before_request():
...
Do stuff
...
if (request.endpoint != 'retrieve_status'):
session.permanent = True
app.permanent_session_lifetime = timedelta(minutes=10)
session.modified = True