欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

Flask笔记-session安全问题(避免任务重复提交)

发布时间:2025/3/15 31 豆豆
生活随笔 收集整理的这篇文章主要介绍了 Flask笔记-session安全问题(避免任务重复提交) 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

防止同一个session多次提交某任务

此处的url提交后,会处理30s。 

 

当第一次提交session时,会延迟30s然后返回数据:

当在30s内,同样的session输入了此url:

302重定向,将其重定向到sessionsafetest中。

 

此例子原理是这样的:

在session存入一条user_info的数据

Flask会默认把session数据放到客户端的cookie中:

新增RequestManager类,将这个数据记录下来。在服务器处理结束后,移除这个数据。

在请求之前,如果发现RequestManager类中有这个session数据了,就让其重定向到其他页面。

相关代码如下:

class RequestManager:currentUser = set()@staticmethoddef add(user):RequestManager.currentUser.add(user)@staticmethoddef remove(user):RequestManager.currentUser.remove(user)@staticmethoddef isSessionExist(user):for item in RequestManager.currentUser:if item == user:return Truereturn False@staticmethoddef printAll():print(RequestManager.currentUser)

拦截器相关的:

@app.after_request def after_request(response):if request.path == "/sessionsafetest":return responseuser = session.get('user_info')try:RequestManager.remove(user)except Exception as e:traceback.print_exc()print(RequestManager.printAll())return response#做个实验,某个任务要处理30s @app.route("/task30s", methods=['GET']) def goTask():time.sleep(30)result = {"msg" : "success"}return jsonify(result)@app.route("/sessionsafetest", methods=['GET']) def getSeesionSafePage():result = {"msg" : "session is running"}return jsonify(result)

 

总结

以上是生活随笔为你收集整理的Flask笔记-session安全问题(避免任务重复提交)的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。