当前位置:   article > 正文

Flask笔记-session安全问题(避免任务重复提交)_flask防止接口重复提交

flask防止接口重复提交

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

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

 

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

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

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

 

此例子原理是这样的:

在session存入一条user_info的数据

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

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

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

相关代码如下:

  1. class RequestManager:
  2. currentUser = set()
  3. @staticmethod
  4. def add(user):
  5. RequestManager.currentUser.add(user)
  6. @staticmethod
  7. def remove(user):
  8. RequestManager.currentUser.remove(user)
  9. @staticmethod
  10. def isSessionExist(user):
  11. for item in RequestManager.currentUser:
  12. if item == user:
  13. return True
  14. return False
  15. @staticmethod
  16. def printAll():
  17. print(RequestManager.currentUser)

拦截器相关的:

  1. @app.after_request
  2. def after_request(response):
  3. if request.path == "/sessionsafetest":
  4. return response
  5. user = session.get('user_info')
  6. try:
  7. RequestManager.remove(user)
  8. except Exception as e:
  9. traceback.print_exc()
  10. print(RequestManager.printAll())
  11. return response
  12. #做个实验,某个任务要处理30s
  13. @app.route("/task30s", methods=['GET'])
  14. def goTask():
  15. time.sleep(30)
  16. result = {
  17. "msg" : "success"
  18. }
  19. return jsonify(result)
  20. @app.route("/sessionsafetest", methods=['GET'])
  21. def getSeesionSafePage():
  22. result = {
  23. "msg" : "session is running"
  24. }
  25. return jsonify(result)

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/499324
推荐阅读
相关标签
  

闽ICP备14008679号