Flask中的session操作
一、配置SECRET_KEY
因为flask的session是通过加密之后放到了cookie中。所以有加密就有密钥用于解密,所以,只要用到了flask的session模块就一定要配置“SECRET_KEY”这个全局宏。一般设置为24位的字符。配置方法一般有两种。
配置方法一:
新建一个config.py的文件配置secret_key
config.py
1 SECRET_KEY = 'XXXXXXXXX'
然后在主运行文件里面添加config文件里面的内容。
main.py
1 # encoding: utf-8 2 3 from flask import Flask,session 4 import config 5 6 app = Flask(__name__)
配置方法二:
直接在主运行文件里面配置。配置config的时候也是和操作字典是一样的
main.py
1 # encoding: utf-8 2 3 from flask import Flask,session 4 5 app = Flask(__name__) 6 app.config['SECRET_KEY'] = 'XXXXX'
产生方法
可以引入OS模块中的产生一个24位的随机字符串的函数,这种方法有个缺点,就是服务器每次启动之后这个SECRET_KEY的值都会变。具体自己体会!
1 import os 2 3 app.config['SECRET_KEY'] = os.urandom(24) # 随机产生24位的字符串作为SECRET_KEY
二、操作session –操作session就如同操作字典!
1.设置session
1 from flask import Flask,session 2 import os 3 4 app = Flask(__name__) 5 app.config['SECRET_KEY'] = os.urandom(24) 6 7 # 设置session 8 @app.route('/') 9 def set(): 10 session['username'] = 'liefyuan' # 设置“字典”键值对 11 return 'success' 12 13 if __name__ == '__main__': 14 app.run()
2.读取session
因为session就像字典一样所以,操作它的时候有两种方法:
- (1)result = session[‘key’] :如果内容不存在,将会报异常
- (2)result = session.get(‘key’) :如果内容不存在,将返回None
所以,使用第二种方法获取session较好。
1 from flask import Flask,session 2 import os 3 4 app = Flask(__name__) 5 app.config['SECRET_KEY'] = os.urandom(24) 6 7 # 设置session 8 @app.route('/') 9 def set(): 10 session['username'] = 'liefyuan' # 设置“字典”键值对 11 return 'success' 12 13 # 读取session 14 @app.route('/get') 15 def get(): 16 # session['username'] 17 # session.get('username') 18 return session.get('username') 19 20 if __name__ == '__main__': 21 app.run()
3.删除session
1 #encoding: utf-8 2 3 from flask import Flask,session 4 import os 5 6 app = Flask(__name__) 7 app.config['SECRET_KEY'] = os.urandom(24) 8 9 10 # 设置session 11 @app.route('/') 12 def set(): 13 session['username'] = 'liefyuan' 14 return 'success' 15 16 17 # 读取session 18 @app.route('/get/') 19 def get(): 20 # session['username'] 21 # session.get('username') 22 return session.get('username') 23 24 25 # 删除session 26 @app.route('/delete/') 27 def delete(): 28 print session.get('username') 29 session.pop('username') 30 print session.get('username') 31 return 'success' 32 33 34 if __name__ == '__main__': 35 app.run()
4.清除session中所有数据
1 #encoding: utf-8 2 3 from flask import Flask,session 4 import os 5 6 app = Flask(__name__) 7 app.config['SECRET_KEY'] = os.urandom(24) 8 9 10 # 设置session 11 @app.route('/') 12 def set(): 13 session['username'] = 'liefyuan' 14 return 'success' 15 16 17 # 读取session 18 @app.route('/get') 19 def get(): 20 # session['username'] 21 # session.get('username') 22 return session.get('username') 23 24 25 # 删除session 26 @app.route('/delete') 27 def delete(): 28 print session.get('username') 29 session.pop('username') 30 print session.get('username') 31 return 'success' 32 33 34 # 清除session中所有数据 35 @app.route('/clear') 36 def clear(): 37 print session.get('username') 38 # 清除session中所有数据 39 session.clear 40 print session.get('username') 41 return 'success' 42 43 if __name__ == '__main__': 44 app.run()
三、设置session的过期时间
如果没有指定session的过期时间,那么默认是浏览器关闭后就自动结束。session.permanent = True在flask下则可以将有效期延长至一个月。下面有方法可以配置具体多少天的有效期。
- 如果没有指定session的过期时间,那么默认是浏览器关闭后就自动结束
- 如果设置了session的permanent属性为True,那么过期时间是31天。
- 可以通过给
app.config
设置PERMANENT_SESSION_LIFETIME
来更改过期时间,这个值的数据类型是datetime.timedelay
类型。
使用的需求:
- 1.在登录网页界面,下面有一个“记住我”选项,如果点击了则设置session的有效期长一点。就是设置这个!
1 # 设置session 2 @app.route('/') 3 def set(): 4 session['username'] = 'liefyuan' 5 session.permanent = True # 长期有效,一个月的时间有效 6 return 'success'
一种更先进的配置有效期的方法:(比如配置7天有效)
- 1.引入包:
from datetime import timedelta
- 2.配置有效期限:
app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(days=7) # 配置7天有效
- 3.设置:
session.permanent = True
1 #encoding: utf-8 2 3 from flask import Flask,session 4 from datetime import timedelta 5 import os 6 7 app = Flask(__name__) 8 app.config['SECRET_KEY'] = os.urandom(24) 9 app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(days=7) # 配置7天有效 10 11 12 # 设置session 13 @app.route('/') 14 def set(): 15 session['username'] = 'liefyuan' 16 session.permanent = True 17 return 'success'