赞
踩
防止同一个session多次提交某任务
此处的url提交后,会处理30s。
当第一次提交session时,会延迟30s然后返回数据:
当在30s内,同样的session输入了此url:
302重定向,将其重定向到sessionsafetest中。
此例子原理是这样的:
在session存入一条user_info的数据
Flask会默认把session数据放到客户端的cookie中:
新增RequestManager类,将这个数据记录下来。在服务器处理结束后,移除这个数据。
在请求之前,如果发现RequestManager类中有这个session数据了,就让其重定向到其他页面。
相关代码如下:
- class RequestManager:
-
- currentUser = set()
-
- @staticmethod
- def add(user):
- RequestManager.currentUser.add(user)
-
- @staticmethod
- def remove(user):
- RequestManager.currentUser.remove(user)
-
- @staticmethod
- def isSessionExist(user):
- for item in RequestManager.currentUser:
- if item == user:
- return True
-
- return False
-
- @staticmethod
- def printAll():
- print(RequestManager.currentUser)

拦截器相关的:
- @app.after_request
- def after_request(response):
-
- if request.path == "/sessionsafetest":
- return response
-
- user = 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)

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。