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)
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)