Flask-1-05-Cookie&Session

接下来我会演示一下设置Cookie 读取Cookie 删除Cookie,以及添加Cookie的原理

 接下来我们分别定义3个视图为 set_cookie、get_cookie、del_cookie

# coding:utf-8

from flask import Flask, make_response, request

app = Flask(__name__)

@app.route("/set_cookie")
def set_cookie():
    # 创建一个响应的对象
    resp = make_response('设置成功')
    # 设置cookie
    resp.set_cookie('username1', 'hannibal')
    # 设置多个cookie
    resp.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 resp if __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 sys

reload(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

 

posted @ 2019-07-23 16:51  Hannibal_2018  阅读(143)  评论(0编辑  收藏  举报