Flask笔记-session安全问题(避免任务重复提交)
生活随笔
收集整理的這篇文章主要介紹了
Flask笔记-session安全问题(避免任务重复提交)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
防止同一個session多次提交某任務(wù)
此處的url提交后,會處理30s。?
?
當(dāng)?shù)谝淮翁峤籹ession時,會延遲30s然后返回數(shù)據(jù):
當(dāng)在30s內(nèi),同樣的session輸入了此url:
302重定向,將其重定向到sessionsafetest中。
?
此例子原理是這樣的:
在session存入一條user_info的數(shù)據(jù)
Flask會默認(rèn)把session數(shù)據(jù)放到客戶端的cookie中:
新增RequestManager類,將這個數(shù)據(jù)記錄下來。在服務(wù)器處理結(jié)束后,移除這個數(shù)據(jù)。
在請求之前,如果發(fā)現(xiàn)RequestManager類中有這個session數(shù)據(jù)了,就讓其重定向到其他頁面。
相關(guān)代碼如下:
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)攔截器相關(guān)的:
@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#做個實驗,某個任務(wù)要處理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)?
總結(jié)
以上是生活随笔為你收集整理的Flask笔记-session安全问题(避免任务重复提交)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux工作笔记-重置密码解决MySQ
- 下一篇: Qt文档阅读笔记-Custom Item