会话是客户端登录到服务器并注销服务器的时间间隔。需要在该会话中保存的数据会存储在服务器上的临时目录中。
这个对象相当于用密钥签名加密的 cookie ,即用户可以查看你的 cookie ,但是如果没有密钥就无法修改它
会话会为每个客户端的会话分配会话ID。会话数据存储在cookie的顶部,服务器以加密方式对其进行签名
一个实现了简单登录功能的demo
:
from flask import Flask, session, redirect, url_for, request
# 创建一个app实例
app = Flask(__name__)
"""
必须创建一个 secret_key,创建方法:
import os
print(os.urandom(16))
"""
app.secret_key = '\xf9\x84L<\x12/;\xcfg\xdf\x18!I:\xa3\x8e?\xed\x08O'
# 主页面,如果有会话数据则显示登陆人,如果没有会话数据则提示跳转到登录
@app.route('/')
def root():
if 'username' in session:
username = session['username']
return f"{username} 正在访问主页<br/><a href='/logout'>点击这里注销</a>"
return "未登录, 无法访问该页面<br/><a href='/login'>点击这里登录</a>"
# 登录,如果发送的是post请求则去进行校验,校验通过跳转到主页面,如果发送的是get请求则显示登录页面
@app.route('/login', methods=['POST', 'GET'])
def login():
if request.method == 'POST':
session['username'] = request.form['username']
return redirect(url_for('root'))
return '''
<form action = "" method = "post">
<p><input type="text" name="username"/></p>
<p><input type="submit" value ="登录"/></p>
</form>
'''
# 删除会话并且跳转到主页
@app.route('/logout')
def logout():
session.pop('username', None)
return redirect(url_for('root'))
if __name__ == '__main__':
app.run(debug=True)
效果: