在 Flask 中,会话(Session)是一种在客户端和服务器之间存储信息的机制。与 Cookie 不同,会话数据存储在服务器端,而客户端只存储一个会话标识符(通常是一个加密的 Cookie),用于在请求之间保持用户的状态。

Flask 中使用 session 对象来处理会话。要使用会话,你首先需要设置一个秘密密钥(secret key)。这个密钥用于对会话数据进行加密,确保安全性。以下是一个简单的使用 Flask 会话的示例:
from flask import Flask, render_template, session, redirect, url_for, request

app = Flask(__name__)

# 设置一个秘密密钥,用于加密会话数据
app.secret_key = 'your_secret_key'

@app.route('/')
def index():
    if 'username' in session:
        username = session['username']
        return render_template('index.html', username=username)
    return 'You are not logged in'

@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        # 获取表单提交的用户名
        username = request.form['username']
        # 将用户名存储到会话中
        session['username'] = username
        return redirect(url_for('index'))
    return render_template('login.html')

@app.route('/logout')
def logout():
    # 从会话中删除用户名
    session.pop('username', None)
    return redirect(url_for('index'))

if __name__ == '__main__':
    app.run(debug=True)

在这个例子中,有三个路由:

1. /:如果用户已经登录,显示欢迎页面,否则显示未登录的消息。
2. /login:处理用户登录请求,将用户名存储到会话中。
3. /logout:处理用户注销请求,从会话中删除用户名。

在模板文件 index.html 中,你可以使用 {{ username }} 来显示当前登录用户的用户名。

模板文件 index.html:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Flask Session</title>
</head>
<body>
    {% if username %}
        <h1>Welcome, {{ username }}!</h1>
        <p><a href="{{ url_for('logout') }}">Logout</a></p>
    {% else %}
        <h1>You are not logged in</h1>
        <p><a href="{{ url_for('login') }}">Login</a></p>
    {% endif %}
</body>
</html>

模板文件 login.html:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Login</title>
</head>
<body>
    <h1>Login</h1>
    <form method="post" action="{{ url_for('login') }}">
        <label for="username">Username:</label>
        <input type="text" id="username" name="username" required>
        <br>
        <button type="submit">Login</button>
    </form>
</body>
</html>

在实际应用中,你可能会使用更复杂的用户认证系统,但这个例子演示了如何使用 Flask 的会话来跟踪用户状态。请确保在生产环境中使用安全的会话配置,例如使用 HTTPS 来保护会话数据。


转载请注明出处:http://www.zyzy.cn/article/detail/7308/Flask