Flask session 概念:
程序可以把数据存储在用户会话中,用户会话是-种私有存储,默认情况下,它会保存在客户端cookie中。Flask提供了session 对
象来操作用户会话。session 是基于cookie实现, 保存在服务端的键值对(形式为 {随机字符串:‘xxxxxx’}), 同时在浏览器中的cookie中也对应一相同的随机字符串,用来再次请求的 时候验证;
注意 :Flask中的session是存在浏览器中 默认key是session(加密的cookie),使用session时要设置一个密钥app. secret_ key
操作session就像操作python 中的字典一样,我们可以使用session['user']获取值,也可以使用session. get('user')获取值。
因为session就像字典一样所以,操作它的时候有两种方法:
-
(1)result = session[‘username’] :如果内容不存在,将会报异常
-
(2)result = session.get(‘username’) :如果内容不存在,将返回None(推荐用法)
所以,使用第二种方法获取session较好。
下面的代码中展示了session的设置、读取、删除、清除
# *===================================*
# -*- coding: utf-8 -*-
# * Time : 2019-06-27 17:06
# * Author : zhangsf
# *===================================*
from flask import Flask, session
from datetime import timedelta
import os
app = Flask(__name__)
app.config['SECRET_KEY'] = os.urandom(24)
app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(days=7) # 配置7天有效
# 设置session
@app.route('/')
def set():
session['username'] = 'zhangvalue' # 设置“字典”键值对
session.permanent = True # 设置session的有效时间,长期有效,一个月的时间有效,
# 具体看上面的配置时间具体的,没有上面设置的时间就是一个月有效
print(app.config['SECRET_KEY'])
return 'success'
# 读取session
@app.route('/get')
def get():
# 第一种session获取如果不存在会报错
# session['username']
# 推荐使用session.get('username')
# session.get('username')
return session.get('username')
# 删除session
@app.route('/delete/')
def delete():
print(session.get('username'), session.pop('username', None))
# 或者 session['username'] = False
print(session.get('username'))
return 'success'
# 清除session中所有数据
@app.route('/clear')
def clear():
print(session.get('username'))
# 清除session中所有数据
session.clear
print(session.get('username'))
return 'success'
if __name__ == '__main__':
app.run(host='0.0.0.0', port='5010')
在获取session的时候如果如果使用第一种方法,不存在经就会报错,因为不存在key为username2
KeyError: 'username2'
设置session的过期时间
如果没有指定session的过期时间,那么默认是浏览器关闭后就自动结束。
session.permanent = True在flask下则可以将有效期延长至一个月。下面有方法可以配置具体多少天的有效期。
-
如果没有指定session的过期时间,那么默认是浏览器关闭后就自动结束
-
如果设置了session的permanent属性为True,那么过期时间是31天。
-
可以通过给
app.config
设置PERMANENT_SESSION_LIFETIME
来更改过期时间,这个值的数据类型是datetime.timedelay
类型。
一种更先进的配置有效期的方法:(比如配置7天有效)
-
1.引入包:
from datetime import timedelta
-
2.配置有效期限:
app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(days=7) # 配置7天有效
-
3.设置:
session.permanent = True
具体代码如上。