flask 的session
python的flask操作设置、获得与删除session
首先讲一下Python的flask中session与cookies的关系,session是储存在服务器中的,cookies是储存在浏览器本地中,而flask的session与cookies,
session是经过加密保存在cookies中。 在flask中使用session需要先设置secret_key,根据算法加密session信息,来看下flask的session的API: ----------------------------------- 如果你设置了 Flask.secret_key ,你可以在 Flask 应用中使用会话。会话主要使得在请求见保留信息成为可能。 Flask 的实现方法是使用一个签名的 cookie 。
这样,用户可以查看会话的内容,但是不能修改它,除非用户知道密钥。所以确保密钥被设置为一个复杂且无法被容易猜测的值。
SECRET_KEY
from flask import Flask,session import os app = Flask(__name__) app.config['SECRET_KEY'] = os.urandom(24) # 添加数据到session中 # 操作session的时候 跟操作字典是一样的。 # SECRET_KEY @app.route('/') def hello_world(): session['username'] = 'zhangsan' return 'Hello World!' if __name__ == '__main__': app.run(debug=True)
在flask中操作session有一点需要注意,就是需要设置一个'SECRET_KEY'。可以单独在配置文件中写SECRET_KEY. SECRET_KEY = 'abc' #写在配置文件里的 app.config['SECRET_KEY'] = 'abc' # 写在main.py 就是app.run()的页面 都是可以的,我这里用了一个随机的变量,而且是24位的。 os.urandom(24) 会从 0-9,a-z A-Z中随机选中24个字符串用做加密session的秘钥。
或者称之为 “盐”。设置好之后执行下代码,然后在谷歌浏览器中找找这个session。在谷歌浏览器中找到设置,然后在最下面找到高级。
设置session过期时间
一般的session都过期时间
如果没有指定session的过期时间,那么默认是浏览器关闭就自动结束,
如果设置了session的permanent属性为True,那么过期时间是31天。
如何设置过期时间? from datetime import timedelta app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(days=7) session.permanent = True 当我只设置了session.permanent = True时,可以看到浏览器中127.0.0.1中的session过期时间为31天
session 的设置 获取 删除 清空 下面代码示例
from flask import Flask,session
import os
from datetime import timedelta
app = Flask(__name__)
app.config['SECRET_KEY'] = os.urandom(24)
app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(days=7)
# 添加数据到session中
# 操作session的时候 跟操作字典是一样的。
# SECRET_KEY
@app.route('/')
def hello_world():
session['username'] = 'zhangsan'
# 如果没有指定session的过期时间,那么默认是浏览器关闭就自动结束
# 如果设置了session的permanent属性为True,那么过期时间是31天。
session.permanent = True
return 'Hello World!'
@app.route('/get/')
def get():
# session['username'] 如果username不存在则会抛出异常
# session.get('username') 如果username不存在会得到 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)