Flask-Login官网介绍:用于管理Flask的user session的,其实就是登录、登出和“记住我”功能。
Flask提供的2种cookie的写入方式
-
第一种:使用response对象的set_cookie()方法
这种方式cookie都是明文,不安全。在Flask-Login中设置remember_token就是采用这种方式,但是经过加密的,在login_manager.py文件中。
源码中set_cookie
def _set_cookie(self, response):
...省略...
response.set_cookie(cookie_name,#cookie名
value=data,#cookie值
expires=expires,#规定 cookie 的有效期,单位是秒
domain=domain,#规定 cookie 的域名
path=path,#规定 cookie 的服务器路径
secure=secure,#规定是否通过安全的 HTTPS 连接来传输 cookie
httponly=httponly)#通过js脚本将无法读取到cookie信息,这样能有效的防止XSS攻击
-
第二种:针对第一种的弊端,Flask提供的session对象,可以方便的对写入的cookie进行签名(Flask必须配置SECRET_KEY)
@app.route('/login/<name>')
def login(name):
"""模拟登录"""
session['login'] = True
session['andy'] = 'jang'
return redirect(url_for('.main', name=name))
这种方式只是在cookie中写入一个名为session的cookie,这个session中可以包含很多信息
针对两种cookie的写入方式,设置过期时间的方式也不同
使用
response对象的set_cookie()方法
这种方式在是通过expires参数来设置过期时间,默认是会话结束时session失效,在Flask-Login中是通过在Flask的配置文件settings.py配置失效时间的:
REMEMBER_COOKIE_DURATION = datetime.timedelta(days=1)
session对象的方式:这种方式默认也是会话结束时session失效,可以通过设置
session.permanent=True可以将session的有效期延长为PERMANENT_SESSION_LIFETIME指定的时长:
PERMANENT_SESSION_LIFETIME = datetime.timedelta(minutes=10)








网友评论