最近学习Flask开发,看官方文档产生疑问,就是session
有效期的问题,默认貌似是没有有效期的,只有关闭浏览器session
才会失效,其实控制session
的有效期非常简单,简单到只需要添加两行代码就可以实现,先看看官方session
的示例代码。
官方文档示例代码
官方示例简单明了的演示了session
的使用,代码一共为3个页面,首页、登陆和登出
访问首页时,如果用户没有登陆或者session
到期时,会提示You are not logged in
。
访问登陆页时,如果是POST
请求取出username
保存到session
中,并跳转到首页。
访问登出页面时,从session
中移除username
,并跳转到首页。
from flask import Flask, session, redirect, url_for, escape, request
app = Flask(__name__)
# Set the secret key to some random bytes. Keep this really secret!
app.secret_key = b'_5#y2L"F4Q8z\n\xec]/'
@app.route('/')
def index():
if 'username' in session:
return 'Logged in as %s' % escape(session['username'])
return 'You are not logged in'
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
session['username'] = request.form['username']
return redirect(url_for('index'))
return '''
<form method="post">
<p><input type=text name=username>
<p><input type=submit value=Login>
</form>
'''
@app.route('/logout')
def logout():
# remove the username from the session if it's there
session.pop('username', None)
return redirect(url_for('index'))
if __name__ == "__main__":
app.run()
把上面的代码保存起来运行,用浏览器访问各个功能,按F12键,查看Request Headers
和Response Headers
并观察它们的变化,发现登陆后在Request Headers
的Cookie
中多了session=xxx
,这是因为我们在login
视图函数中将用户提交的username
保存在session
中
怎么设置session的到期时间呢
设置到期时间
在login
视图函数中添加以下两行代码
...
...
def login():
session.permanent = True
app.permanent_session_lifetime = timedelta(minutes=1) # 设置session到期时间,小编整理一套Python资料和PDF,有需要Python学习资料可以加学习群:631441315 ,反正闲着也是闲着呢,不如学点东西啦~~
...
...
设置到期时间后,在到期后会提示需要登录,在session
到期前刷新浏览器,会重新计算session
的到期时间
在学习之前,有使用flask_restful
开发过一个简单的API,是通过Token进行访问限制的,需要什么功能都是直接搜来用的,一直觉得在会话这款应该比较难理解和学习,没想到这么简单,希望对大家有所帮助,如有不对指出,还请指正,谢谢。
每次浏览器关闭后再次打开就需要重新登陆,这似乎并不好,接下来学习如果在本地保存登陆状态。