1.把敏感的数据经过加密后放入session中,然后在把session存放到cookie中,下次请求的时候,再从浏览器发送过来的cookie中读取session,
然后再从session中读取敏感数据,并进行解密,获取最终的用户数据
2.flask的这种session,*可以节省服务器的开销,因为把所有信息都存放到了客户端*(浏览器)
falsk中使用cookie和session
1.cookies:在flask中操作cookie 是通过response对象来操作,可以在response返回之前,通过response.set_cookie来设置,这个方法有一下
几个参数需要注意:
*key:设置的cookie的key
*value:key对应的value
*max_age:改cookie的过期时间,如果不设置,则浏览器关闭后就会自动过期。
*expires:过期时间,应该是一个datetime类型
*domain:该cookie在哪个域名中有效.一般设置子域名,比如cms.example.com
*path:该cookie在哪个路径下有效。
2.session:Flask中的sessipn是通过from falsk import session 然后添加值key和value进去即可。并且,falsk中的session机制是将
session信息假面,然后存储在cookie 中。专业术语叫做client side session
1.使用session需要从flask中导入session,以后所有和session相关操作都是通过这个变量来的
2.使用session需要设置SECRET_KEY,用来作为加密用的。并且这个SECRET_KEY如果每次服务器启动后都变化的话,那么值钱的session就不能
通过当前这个SECRET_KEY进行解密了
*操作session的时候,跟操作字典是一样的。
*添加session:session['username']
*删除session:session.pop('username')或者del session['username']
*清除所有session:session.clear()
*获取session:session.get('username')
3.设置session的过期时间:
如果没有指定session 的过期时间,那么默认是浏览器关闭后自动结束
如果设置了session的permanent属性为True,那么过期时间是31天。
可以通过给app.config设置PERMANENT_SESSION_LIFETIME来更改过期时间这个值的数据类型是datetime.timedelay类型
from flask import Flask,session
import os
from datetime import timedelta
app = Flask(__name__)
#设置config的时候只有一个数据可以用下面这种
#SECRET_KEY的值需要24个字符串->是用来加密用的
app.config['SECRET_KEY']=os.urandom(24)
#设置session的过期时间为7天
app.config['PERMANENT_SESSION_LIFETIME']=timedelta(days=7)
#config中有多个数据才用->app.config.from_object(config)
#添加数据到session中
#操作session的时候,跟操作字典是一样的
@app.route('/')
def hello_world():
session['username']='miracle'
# 如果没有设置session的过期时间,那么默认是浏览器关闭后就自动结束
# 如果设置了session的permanent属性为True,那么过期时间为31天,permanent会从PERMANENT_SESSION_LIFETIME中读取数据
session.permanent=True
return 'index'
@app.route('/get/')
def get():
#session['username']->因为存放在session里面的信息是字典格式就跟获取字典一样,这种发放如果值不存在就会抛出一样
#session.get('username')->使用get值不存在返回None
return session.get('username')
@app.route('/delete/')
def delete():
print(session.get('username'))
session.pop('username')
print(session.get('username'))
return 'success'
@app.route('/clear/')
def clear():
print(session.get('username'))
#删除session中的所有数据
session.clear()
print(session.get('username'))
return 'success'
if __name__ == '__main__':
app.run(debug=True)