這篇文章帶給大家的內容是關於Python中Tornado安全Cookie機制的講解,有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。
Cookie是許多網站為了辨別使用者的身分而儲存在使用者本機終端(Client Side)d的數據,在Tornado中使用RequestHandler.get_cookie()、RequestHandler.set_cookie()可以方便地對Cookie進行讀寫。
實例:Cookie的簡單讀寫
import tornado.web session_id = 1 class MainHandler(tornado.web.RequestHandler): def get(self): global session_id if not self.get_cookie("session"): self.set_cookie("session",str(session_id)) session_id+=1 self.write("设置新的session") else: self.write("已经具有session") if __name__ == '__main__': app=tornado.web.Application([ ("/",MainHandler) ]) app.listen("8888") tornado.ioloop.IOLoop.current().start()
本例中用get_cookie()函數判斷Cookie名稱【session】是否存在,如果不存在則為其賦予新的session_id.
在實際應用中,Cookie經常像本例這樣用於保存session資訊。
因為Cookie總是被保存在客戶端,所以如何保存其不被篡改是伺服器端程式必須解決的問題。
Tornado為Cookie提供了資訊加密機制,使得客戶端無法隨意解析和修改Cookie的鍵值。
程式碼:
import tornado.web session_id = 1 class MainHandler(tornado.web.RequestHandler): def get(self): global session_id #get_secure_cookie代替get_cookie if not self.get_secure_cookie("session"): #set_secure_cookie代替set_cookie self.set_secure_cookie("session",str(session_id)) session_id+=1 self.write("设置新的session") else: self.write("已经具有session") if __name__ == '__main__': app=tornado.web.Application([ ("/",MainHandler) ],cookie_secret="JIA_MI_MI_YAO") app.listen("8888") tornado.ioloop.IOLoop.current().start()
比較上面的簡單Cookie實例可以發現不同之處:
在tornado.web.Application物件初始化時賦予cookie_secret參數,該參數值時一個字串,用於保存本網站Cookie加密時的金鑰。
在需要讀取cookie的地方使用RequestHandler.get_secure_cookie取代原來的RequestHandler.get_cookie呼叫。
在需要寫入Cookie的地方用RequestHandler.set_secure_cookie替換原來的RequestHandler.set_cookie調用,
這樣,就不需要擔心Cookie偽造的問題了,但是cookie_secret參數值作為加密金鑰,需要好好保護,不能外洩。
#以上是Python中Tornado安全Cookie機制的解說的詳細內容。更多資訊請關注PHP中文網其他相關文章!