Flask笔记-session安全问题(避免任务重复提交)
生活随笔
收集整理的這篇文章主要介紹了
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安全问题(避免任务重复提交)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux工作笔记-重置密码解决MySQ
- 下一篇: Qt实践|HTTP知识点-使用百度AI语