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/<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)
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容