关于Flask-Login中session失效时间的处理
最近需要使用Python开发web系统,主要用到的框架就是Flask,前端使用Jinja2模板引擎和Bootstrap,web容器使用Cherrypy,其中关于Login管理的使用了Flask-Login插件。
基本上也是从零学起,前前后后花了有好几个月的时间,还是在借鉴了已有的一些项目基础上。在开发的过程中有很多的想法和体会,记录下来,有不对的地方欢迎大家指正。
在处理登录管理的部分,在 Flask-Login 中,如果你不特殊处理的话,session 是在你关闭浏览器之后失效的,而如果不关闭浏览器的话,失效的时间据说是1年,还是1个月,这个地方没看到官方说法,总之是很长,在某些业务场景下这样的处理方式是不能接受的。由于系统的使用者提出了新的需求类似平时的SSO处理机制,大概无任何操作一二十分钟就提示需要再次登录,这样的要求是合理的,之前也没有太注意这个方面的时间,所以就需要回过头来研究Flask-Login的session失效时间和设置问题。以前的登录部分代码:
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'GET':
return render_template('login.html')
username = request.form['username']
password = request.form['password']
user = User.get_user(username, password)
if not user:
flash('Username or Password is invalid.', 'error')
return redirect(url_for('.login'))
login_user(user)
# flash('Logged in successfully', "info")
return render_template('index.html')
其中的User是models.py中定义的class,可以用于验证用户的合法性。在views部分通过@login_required控制,这样可以成功验证用户并跳转到相应页面,但是之前提到的session失效问题默认是很长时间而且一旦关闭浏览器即失效。那么如何设置能够实现制定时间内session失效,比如10minutes,查了一下文档竟然没发现说到这个问题,比如这个网站:http://www.pythondoc.com/flask-login/应该是正规的文档吧,接着查一些论坛,很多人讨论这个问题,有说设置REMEMBER_COOKIE_DURATION这个参数的,但是仔细看了这个参数和要解决的问题不是一个问题,接着就想到去stackoverflow上查一下吧,就搜索了一下关键词,找了好几个问答,其中有说到参数permanent_session_lifetime,
我觉得应该是这个差不多了,接着就这个关键词再次搜索,果然发现了一些很有参考价值问答,其中还提到session.permanent = True这个参数,于是在代码里进行设置:
from flask import session
from datetime import timedelta session.permanent = True
app.permanent_session_lifetime = timedelta(minutes=10)
其中两个参数意义也比较好理解,第一个为设置session为永久的,第二个再来制定具体时间
但是,关键是但是测试了半天貌似不起作用,又查了半天中文的一些论坛,不知原因何在,然后又是在stackoverflow上有人说这个设置不能放在request外面,要放在request里面才能生效,比如这样:
from flask import session
from datetime import timedelta @app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'GET':
return render_template('login.html') username = request.form['username']
password = request.form['password']
user = User.get_user(username, password)
if not user:
flash('Username or Password is invalid.', 'error')
return redirect(url_for('.login'))
login_user(user)
session.permanent = True
app.permanent_session_lifetime = timedelta(minutes=10)
# flash('Logged in successfully', "info") return render_template('index.html')
再去测试,已经可以成功按设置的时间来提示登录了。
这个问题也许对于一些人来不算问题,但是从我自己解决这个问题来看,目前我们的一些文档,问答还是有很多欠缺的地方,论坛上往往对一个问题互相转载,很少有独立的思考和实践的代码sample让初学者参考,在此再次推荐推荐大家一个问答网站:stackoverflow,相信很多人也都在用这个,能够得到很多有价值的问答,尤其是在国内还不是用的特别广泛的技术。
对于这个问题,目前也是能使用的阶段,也没有再去研究Flask-Login的一些原理,对于技术只有实践了你才有可能真正掌握,或者只能停留在理论阶段,希望以后有机会再深入研究实践一下。
关于Flask-Login中session失效时间的处理的更多相关文章
- 【原创】大叔问题定位分享(35)spring中session失效时间
spring项目中将sessionid对应的cookie过期时间设置很长,但是实际session还是在半个小时后失效,跟了一下代码,spring中session实现接口为 org.springfram ...
- 第六篇 flask中session
Flask中的Session非常的奇怪,他会将你的SessionID存放在客户端的Cookie中,使用起来也非常的奇怪 Flask 中 session 的使用 1. Flask 中 session 是 ...
- flask中的endpoint、自定义转化器、与djnago中session区别、利用装饰器实现登录认证
flask路由中的endpoint 与自定义转化器 ''' endpoint主要用于 反向解析, 例如:login函数中配的路由是/login,其中endpoint='lg' 则在其他函数,可以用 u ...
- Flask中session实现原理
前言 flask_session是flask框架实现session功能的一个插件,用来替代flask自带的session实现机制,flask默认的session信息保存在cookie中,不够安全和灵活 ...
- Asp.net中延长session失效时间(2点注意web.config和IIS)
一个是软件系统中的web.config: 配置文件web.config 的<system.web>下加上<sessionState mode="InProc" ...
- Flask 框架中 上下文基础理念,包括cookie,session存储方法,requset属性,current_app模块和g模块
Flask中上下文,分为请求上下文和应用上下文.既状态留存 ,就是把变量存在某一个地方可以调用 请求上下文:实际就是request和session用法理念,既都是可以存储东西. 应用上下文:既变量共享 ...
- java 中设置session失效时间
程序中session都有一个默认的过期时间,其中tomcat中的默认时间为30分钟,根据需要我们可以去手动设置session的过期时间,以下是设置session的过期时间的三个方法:1.在tomcat ...
- Flask入门request session cookie(二)
1 HTTP方法分类 1 GET 浏览器告知服务器:只获取页面上的信息并发给我.这是最常用的方法. 2 HEAD 浏览器告诉服务器:欲获取信息,但是只关心消息头 .应用应像处理 GET 请求一样来处理 ...
- Python Flask,cookie,session ,设置、获取、删除
使用Response类的set_cookie()方法可以设置cookie: Response.set_cookie( key, //键 value='', //值 max_age=None, //秒为 ...
随机推荐
- 恶补web之一:html学习(1)
发现以前欠下的web知识太多鸟,只有重头开始好好学吧,恶补第一站就是html知识啦! html指的是超文本标记语言,它不是编程语言,而是一种标记语言;标记语言是一套标记标签(markup tag),h ...
- caffe中是如何运用protobuf构建神经网络的?
caffe这个框架设计的比较小巧精妙,它采用了protobuf来作为交互的媒介,避免了繁重的去设计各个语言的接口,开发者可以使用任意语言通过这个protobuf这个媒介,来运行这个框架. 我们这里不过 ...
- CSS基础:替换元素和非替换元素
简介 根据 "外在盒子" 是内联还是块级我们可以把元素分为内联元素和块级元素,而根据是否具有可替换内容,我们也可以把元素分为替换元素和非替换元素.这种通过修改某个属性值,例如 &l ...
- MongoDB学习笔记(四)
第四章 Mongodb聚合函数 插入 测试数据 for(var j=1;j<3;j++){ for(var i=1;i<3;i++){ var person={ Name:"ja ...
- ## 分享一下Mac(苹果电脑)里面好用的软件!
该文章主要分享 Mac电脑常用的软件 文章来源于 github小弟调调™的仓库转载 说明 [Open-Source Software][OSS Icon] 表示 开源软件 ,点击进入 开源 仓库: ...
- ORACLE中主键约束跟唯一索引的区别
分类: DB 2011-12-03 21:34 611人阅读 评论(0) 收藏 举报 oracleconstraintsimmutableusertabledomain 1. 分别用两种方法创建主键 ...
- 无效类字符串:ProgID: Excel.Application
网上发现的方案是改注册表,其实用不着那么麻烦,找2种excel文件:xlsx和xls,把默认打开方式都换成你机器上有的程序就行,比如WPS Office的WPS 表格
- 关于Apple开发者的D-U-N-S Number
企业开发者需要这个信息,中文译名叫邓白氏编码,很多攻略给的那个申请地址已经失效,这个组织官方也有地址可以提交申请资料,不过得注册,苹果目前可用的地址是:https://developer.apple. ...
- 新导入的eclipse项目报错,找不到java包,找不到web.xml文件报错。
新导入的项目可能会出现报错,特别是web项目.我这里提供一种解决方法: 1.右击项目,选择“属性” 2.选择 Resource->java build path->libraries 图中 ...
- Hystrix 熔断机制原理
相关配置 circuitBreaker.enabled 是否开启熔断 circuitBreaker.requestVolumeThreshold 熔断最低触发请求数阈值 circuitBreaker. ...