Flask中Cookie与Sesson

私たちは小さい怪獣、1日正义のウルトラマンに杀されることが ある

Cookie

使用方法

#coding:utf-8
from flask import Flask,make_response
app = Flask(__name__)
@app.route('/')
def index():
    # 最主要的就是下面两行
    res = make_response('first')
    res.set_cookie('user','langzi')
    # 最主要的就是上面两行
    return res

if __name__ == '__main__':
    app.run(debug=True)

使用make_response()方法生成cookie,设定cookie的值,访问主页就能获取到cookie

可以看到cookie是明文保存的,所以可以伪装cookie绕过检测。

Session

和cookie生成方法一样,但是session更加安全,(因为要在web中保持数据)。就像使用flash传递消息数据一样。必须先要设置随机安全码。在flask中,session和cookie一样也是保存在浏览器客户端的。

#coding:utf-8
from flask import Flask,session
import os
app = Flask(__name__)
app.config['SECRET_KEY'] = os.urandom(24)
@app.route('/')
def index():
    # 这里设置生成session,就像设置字典一样
    # 除了设置值为True,还可以设置成别的数字英文之类的
    session['login_in_yes'] = True
    # 然后可以做判断
    if 'login_in_yes' in session:
        if session['login_in_yes'] == True:
            return 'login seccess'
    else:
        return 'login file'

if __name__ == '__main__':
    app.run(debug=True)

os.urandom()就是随机生成一些字符串,把生成的字符串设置成flask的安全key。

这里的session就是随机的,安全性更佳。

当关闭浏览器后,cookie和session会自动消失,不过可以在生成的时候设置该保留时间。

上面的方法获取session和cookie的方法可以直接用.get()方法

def index():
    session['login'] = True
    print session
    print session.get('login')
    print session.get('lllll')

访问后返回结果:

<SecureCookieSession {'login': True}>
True
None

使用get方法可以更加简洁

登陆状态验证

未授权访问页面的本质上。就是没有进行cookie或者session的验证,但是在每个视图函数中写上一大串的判断太麻烦了,这个时候可以使用装饰器。装饰器的作用在前面的python进阶笔记有说过。Python装饰器

在主函数中写一个装饰器,作用是确保访问的页面有session数据

def login_required(func):
    @wraps(func)
    def wrapper(*args, **kwargs):
        if 'login' in session:
            if session['login'] == True:
                return func(*args, **kwargs)
            else:
                return redirect(url_for('web.error'))
        else:
            return redirect(url_for('web.error'))
    return wrapper

然后放在路由下面,视图函数上面。

@web.route('/searchs/',methods=['POST','GET'])
@login_required
def searchs():
    xxxxx
坚持原创技术分享,您的支持将鼓励我继续创作!
------ 本文结束 ------

版权声明

LangZi_Blog's by Jy Xie is licensed under a Creative Commons BY-NC-ND 4.0 International License
由浪子LangZi创作并维护的Langzi_Blog's博客采用创作共用保留署名-非商业-禁止演绎4.0国际许可证
本文首发于Langzi_Blog's 博客( http://langzi.fun ),版权所有,侵权必究。

0%