Flask-中session的工作机制和session操作

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)


猜你喜欢

转载自blog.csdn.net/qq_42991834/article/details/89706758
今日推荐