接下来我会演示一下设置Cookie 读取Cookie 删除Cookie,以及添加Cookie的原理
接下来我们分别定义3个视图为 set_cookie、get_cookie、del_cookie
# coding:utf-8from flask import Flask, make_response, requestapp = Flask(__name__)@app.route("/set_cookie") def set_cookie():# 创建一个响应的对象resp = make_response('设置成功')# 设置cookieresp.set_cookie('username1', 'hannibal')# 设置多个cookieresp.set_cookie('username2', 'circle')# 默认的有效期是关闭浏览器之前 max_age 是手动添加有效期 单位是妙resp.set_cookie('username3', 'benjamin', max_age=3600)return resp@app.route("/get_cookie") def get_cookie():c = request.cookies.get('username1')return c@app.route('/del_cookie') def del_cookie():
# 删除Cookie的时候也需要先创建响应对象resp = make_response('del cookie')resp.delete_cookie('username3')return respif __name__ == '__main__':app.run(host='0.0.0.0', debug=True)
通过返回结果我们可以看出:设置了3个Cookie
如果不指定过期时间默认是会话结束时候
同样我们这里还有设置了一个过期时间为1小时(3600)
当我们访问get_cookie时
当我们删除Cookie时,通过结果可以看出,并没有在浏览器真正的删除了username3这个Cookie,而是帮我们把过期时间更改为了创建时间。显然这么做也是足够的
通过上面的返回信息,我们可以看出,其实就是通过设置Cookie就是在响应头里给我们添加了一条数据而已
其实我们就可以在响应头里自己添加一个Set-Cookie 这个键 并且按照他的格式给它赋值,原理就是这么个原理
resp.headers["Set-Cookie"] = "username3=benjamin; Expires=Tue, 23-Jul-2019 09:49:51 GMT; Max-Age=3600; Path=/"
Session
session对象。它允许你在不同请求间存储特定用户的信息。它是在 Cookies 的基础上实现的,并且对 Cookies 进行密钥签名。这意味着用户可以查看你 Cookie 的内容,但却不能修改它,除非用户知道签名的密钥。
如果你想用有一个看都看不懂的密钥,还不想自己一顿乱敲,你可以通过Python的编译器做一个密钥生成器比如下面的那个方法:
>>> import os >>> os.urandom(24) 'u\x8a\r\x9b\x89\xad7//\xd6\x9a\x19\t\xdb3A\x92\xbaCN\xee\xc8x-'
把这个值复制粘贴进你的代码中,你就有了强壮而且看似专业的密钥
下面将用一个简单的例子来了解session的基本应用方法:
# coding:utf-8 from flask import Flask, session, redirect, url_for, escape, request import sysreload(sys) sys.setdefaultencoding('utf8')app = Flask(__name__) # 设置密钥 这个是必须要有的否则会抛出一个RuntimeError app.config['SECRET_KEY'] = 'u\x8a\r\x9b\x89\xad7//\xd6\x9a\x19\t\xdb3A\x92\xbaCN\xee\xc8x-'@app.route('/') def index():if 'username' in session:print(session['username'])return '欢迎 %s 登陆' % escape(session['username'])return '抱歉你还没有登陆'@app.route('/login', methods=['GET', 'POST']) def login():if request.method == 'POST':session['username'] = request.form['username']# 重定向到index页面return redirect(url_for('index'))return '''<form action="" method="post"><p><input type=text name=username><p><input type=submit value=Login></form>'''@app.route('/logout') def logout():# 如果有就将它删除session.pop('username', None)return redirect(url_for('index'))if __name__ == '__main__':app.run(host='0.0.0.0', debug=True)
当你访问127.0.0.1:5000/logout就会帮你删除那个session