私たちは小さい怪獣、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