Flask开发(十七)Flask数据交互 Session的使用
本篇导读:
- Session的基本配置
- Session的基本使用
Session是基于Cookie实现的,保存在服务端的键值对中。同时,在浏览器的Cookie中也对应一个相同的随机字符串,用来再次请求时的验证。
Session是储存在服务器中的,Cookie是储存在本地浏览器中的,而Flask的Session是基于Cookie,Session是经过加密储存在Cookie中。
Session的基本配置
因为Flask的Session是通过加密之后放到了Cookie中。有加密就有密钥用于解密,所以,用到了Flask的Session模块就一定要配置SECRET_KEY这个全局宏。一般将SECRET_KEY设置为24位的字符。我们可以自己定义一个随机字符串,也可以引入os模块中,自动产生一个24位的随机字符串函数。这种方法有个不足之处,就是服务器每次启动之后这个SECRET_KET的值是不一样的,会造成Session验证失效,用户只有重新登陆。
Session的基本使用
1.设置session
设置Session主要是通过session['name']='value'的方式来完成,name代表的是变量名称,value代表的是变量的值。
app.config['SECRET_KEY']=os.urandom(24) @app.route('/') def set_session(): session['username']='zhangsan' renturn 'Session设置成功'
需要导入相应的模块:from flask import Flask,session
2.获取Session的值
获取Session的值有两种方式,这里推荐使用第二种方法:
- result=session['name'] :如果内容不存在,将会报异常
- result=session.get('name') 如果内容不存在,将会返回None
@app.route('/') def get_session(): username=session.get('username') return username or 'Session为空'
3.删除Session的值或清空Session所有值
删除单个Session的值,可以使用Session.pop('key')这个方法,如果清除多个Session的值,可以使用Session.clear方法。
@app.route('/del_session') def get_session(): session.pop('username') # session.clear() return 'Session被删除'
4.设置Session的过期时间
如果没有指定session的过期时间,那么默认是浏览器关闭后就会自动结束,即关闭浏览器失效。session.permanent=True在Flask下则可以将有效期延长至一个月。下面的方法可以配置session具体有多少天的有效期。
- 如果设置了session的permanent的属性为True,那么过期啥时间为31天。
- 可以通过给app.config设置PERMANENT_SESSION_LIFETIME来更改过期时间。
在实际项目中,经常有需求设置session的过期时间是3天,10天,20天该如何来设置?以下代码演示了如何将session的过期时间具体设置为几天:
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=3) @app.route('/') def set_session(): session['username'] = 'zhangsan' session.permanent = True return 'Session设置成功' if __name__ == '__main__': app.run()
代码清单:
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) @app.route('/') def set_session(): session['username'] = 'zhangsan' session.permanent = True return 'Session设置成功' @app.route('/get_session') def get_session(): username = session.get('username') return username or 'Session为空' @app.route('/del_session') def del_session(): session.pop('username') #session.clear() return 'session被删除' if __name__ == '__main__': app.run()