上一次我们学习了Cookie,知道Cookie是保存在客户端的。
那么有的小伙伴就问了,难道只有客户端能保存?服务器就不可以保存吗?!
当然可以!
Session就是另一种记录用户状态的机制。
Flask的Session是基于Cookie实现的,经过加密保存在服务端的键值对(sesson[‘name’]=’value’)中。
当然,在服务器的Cookie中也对应一个相同的随机字符串,用来再次请求时验证。
一、Session的基本配置
因为Flask的Session是通过加密后放到Cookie中的,既然有加密就肯定有密钥,所以在使用Session模块时就一定要配置SECRET_KEY全局宏。一般我们可以自己设定一个随机字符串,例如:
app.config[‘SECRET_KEY’] = ‘XXXXXXX’
有些小伙伴可能会问:我能不能导入os模块自动生成随机字符串呢?
能!但是不建议。因为服务器每次启动后SECRET_KEY的值会被改变,会造成Session验证失败,用户还需要重新登录。糟糕的用户体验,可能不用几天网站就倒闭了!
二、设置Session
设置Session主要通过session[‘name’]=’value’方法来完成,name代表的是变量名称,value代表的是变量的值。
但是存在一个问题:服务器我们又接触不到,设置好的值怎么查看呢?
哈,办法当然是有的。获取Session的值有两种方法,推荐使用第2种:
l result = session[‘name’]:如果内容不存在,将会报异常
l result = session.get(‘name’):如果内容不存在,将返回None
那万一设置错了怎么删除呢?
很简单!!删除单个Session的值,可以使用Session.pop(‘key’)方法,如果要清除多个值,可以使用Session.clear()方法。
那能不能像Cookie一样设置过期时间呢?
没问题!
Session.permanent = True可以将有效期延长至一个月,如果不设置,浏览器关闭后就自动结束了。
如果一个月太长怎么办?通过给app.config设置PERMANENT_SESSION_LIFETIME来更改过期时间。
三、Session实例
多说不如多练,新建app.py文件,代码如下:
from flask import Flask,session
from datetime import timedelta
import os
app = Flask(__name__)
app.config['SECRET_KEY'] = os.urandom(24) #为了讲解用随机数
app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(days=7) #生成过期日期
@app.route('/')
def set_session():session['username'] = 'zhangsan'session.permanent = Truereturn "Session设置成功!"
#获取session
@app.route('/get_session')
def get_session():username = session.get('username')return username or "Session为空!"
#删除session
@app.route('/del_session')
def del_session():session.pop('username')return "Session被删除!"
if __name__ == "__main__":app.run(debug=True)
运行后访问网址http:127.0.0.1:5000/可以看到:
“设置成功!”,切换到网址http:127.0.0.1:5000/get_session/可以看到:
“zhangsan”就是我们设置的值,再切换到网址http:127.0.0.1:5000/del_session/可以看到:
“删除成功!”
四
是不是觉得so easy?!关于Session的内容就这么多,掌握了Cookie的话这节学起来会比较轻松。
下一次将给小伙伴们介绍一下钩子函数的使用。
你确定不关注我一波?!