session

在学习django中的所有的session是保存在服务器中的数据库的。将sessionid写到浏览器,浏览器发送请求的时候将sessionid传回给服务器,然后再利用sessionid到数据库中匹配对应用户的session信息。django中创建好项目就有默认的数据库,这个保存在数据库中好理解。

但是在Flask中,我们并没有数据库配置,那么session信息保存在哪个位置呢。实际上Flask的session是基于cookie加secret_key 进行加密后保存在cookie中的。

session具体的使用方法:

首先设置SECRET_KEY:

# Flask中需要使用session必须先配置SECRET_KEY
app.config['SECRET_KEY'] = os.urandom(24)
或者 自己输入一个字符串
app.config['SECRET_KEY'] = 'sdfsdfs&&^%dsdf*/*$#'
----------
import os 
os.urandom(n)
返回n个字节的加密的随机字符串

视图函数中使用session跟python字典类似使用key获取值,或者使用get方法。

案例:

# coding=utf-8
# 导入Flask类
from flask import Flask, session
import datetime
# Flask 接收一个参数__name__,
# 导入模块的目录, flask以这个目录为基础,寻找静态文件目录static和模板目录templates
app = Flask(__name__)

app.config['SECRET_KEY'] = 'qweqwr^%%&123?><\][ddd'


@app.route('/set_session')
def set_session():
    # 设置session 字典形式
    session['name'] = 'python'
    session['password'] = '123456'
    return 'session'


@app.route('/get_session')
def get_session():
    # 获取session 采用[key]方式取值,如果key不存在会报错。
    name = session['name']
    print(name)
    # 获取session 采用get方式取值,如果key不存在返回None,
    pwd = session.get('haha')
    print(pwd)
    return 'name:%s ' % name

def 


if __name__ == '__main__':
    # Flask 应用程序实例的方法run启动web服务器
    app.run(debug=True)

设置session之后在浏览器查看cookie信息,可以看到多了个session信息。

删除session

可以直接使用session.pop('key',None):

session.pop('name',None)

如果要删除session中所有数据使用:clear():

session.clear()

@app.route('/del_session')
def del_session():
    # 删除session的某个键值对,返回删除的session值on,如果不存在可以设置一个默认值。
    result = session.pop('name', None)
    # 清除整个session.
    session.clear()
    return '删除session %s ' % result

设置session超时时间

Flask的默认session利用了Werkzeug的SecureCookie,把信息做序列化(pickle)后编码(base64),放到cookie里了。

过期时间是通过cookie的过期时间实现的。

为了防止cookie内容被篡改,session会自动打上一个叫session的hash串,这个串是经过session内容、SECRET_KEY计算出来的,看得出,这种设计虽然不能保证session里的内容不泄露,但至少防止了不被篡改。

过期时间是这样来设置:

    from datetime import timedelta

    session.permanent = True
    app.permanent_session_lifetime = timedelta(minutes=5)
    session['key'] = value
Iyoyo电子书 一本集作者多年开发经验的python电子书 all right reserved,powered by Gitbook文件修订时间: 2022年 09:10:22