上一篇文章: Python:Tornado 第二章:實戰演練:開發Tornado網站:第六節:異步與協程化
下一篇文章: Python:Tornado 第二章:實戰演練:開發Tornado網站:第八節:用戶身份認證
Cookie是不少網站爲了辨別用戶的身份而存儲在用戶本地終端(Client Side)d的數據,在Tornado中使用RequestHandler.get_cookie()、RequestHandler.set_cookie()能夠方便地對Cookie進行讀寫。web
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.segmentfault
在實際應用中,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實例能夠發現不一樣之處:服務器
這樣,就不須要擔憂Cookie僞造的問題了,可是cookie_secret參數值做爲加密密鑰,須要好好保護,不能泄露。cookie