关键词搜索

源码搜索 ×
×

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

发布2020-03-09浏览6186次

详情内容

防止同一个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)

 

相关技术文章

点击QQ咨询
开通会员
返回顶部
×
微信扫码支付
微信扫码支付
确定支付下载
请使用微信描二维码支付
×

提示信息

×

选择支付方式

  • 微信支付
  • 支付宝付款
确定支付下载