Flask-Login中cookie处理

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/')
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)

你可能感兴趣的:(Flask-Login中cookie处理)