5、flask-会话

2023-08-24  本文已影响0人  许忠慧

会话是客户端登录到服务器并注销服务器的时间间隔。需要在该会话中保存的数据会存储在服务器上的临时目录中。

这个对象相当于用密钥签名加密的 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)

效果:

上一篇 下一篇

猜你喜欢

热点阅读