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





![战神引擎传奇手游【1.76盛战传奇免授权版[摸摸登陆器]】最新整理Win系复古服务端+安卓苹果双端+GM授权物品后台+详细搭建教程](https://cdn.jxasp.com:9143/image/20251106/1B4E8594B3BEB90E8601D63A8A39CB0B.jpg)













