Flask入门笔记-06_SESSION

  • Flask中的session并未把session保存在服务器中, 而是把数据通过secret_key进行签名,进行非对称加密(类似JWT),保存在cookie
  • session是类dict类型,读取写入用kv操作即可
  • 如果要使用session, 需要在给应用的设置类属性secret_key(一般为随机字符串)进行签名的密钥
  • 如果没有指定session的过期时间, 那么默认是浏览器关闭后就自动结束
  • 如果设置了session的permanent属性为True, 那么过期时间是31天
  • 通过应用的类属性permanent_session_lifetime可以设置session过期时间这个属性接收datetime.timedelay的数据
from datetime import timedelta

from flask import Flask, request, session, redirect, url_for

# 创建应用
app = Flask(__name__)

# 设置session过期时间为1天
app.permanent_session_lifetime = timedelta(days=1)

# 设置应用密钥
app.secret_key = 'xiantanluohua'

# session的设置
@app.route('/login', methods=['GET', 'POST'])
def login():

    # GET请求
    if request.method == 'GET':
        # send_static_file可以自动判断静态文件的类型, 并设置content-type, 这里不用模板渲染了,直接在static文件夹中放了login.html,返回一个登录界面,
        return app.send_static_file('login.html')

    # POST请求
    else:
        # 获取前端传来的用户名和密码并进行登录校验
        username = request.form.get('username')
        password = request.form.get('password')

        if username == 'zhangsan' and password == '123':
            # 允许session设置过期时间
            session.permanent = True
            # 使用session来记录用户身份  session也是类字典对象, 可以直接赋值
            session['name'] = username

            return '登录成功'
        else:
            return '密码或者用户名错误'

# session的取出
@app.route('/')
def index():
    # 取出session中的用户身份, 进行判断
    name = session.get('name')
    if name:
        return "欢迎回来, %s" % name  # 已登录
    else:
        return "首页"    # 未登录
  • 前端代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="/login" method="post">
    <label for="">用户名: </label><input type="text" name="username"><br/>
    <label for="">密码: </label><input type="password" name="password"><br/>
    <input type="submit" value="登录"><br/>
</form>
</body>
</html>