1. 程式人生 > >cookie、session、csrf

cookie、session、csrf

-s 16px cati 參數 loop start login post session

cookie的設置和獲取

 1 import time
 2 from tornado.web import RequestHandler
 3 
 4 
 5 class IndexHandle(RequestHandler):
 6     def get(self):
 7         # 設置cookie
 8         self.set_cookie(username, ivy)
 9         # 設置過期時間為60s
10         self.set_cookie(username, ivy, expires=time.time() + 60)
11 # 設置過期時間為2天 12 self.set_cookie(username, ivy, expires_days=2) 13 # 當httponly為True時,網頁的js代碼無法獲取該cookie 14 self.set_cookie(username, ivy, httponly=True) 15 # 設置cookie的過期時間為2分鐘,max_age的優先級大於expires 16 self.set_cookie(username, ivy, max_age=120, expires=time.time() + 60)
17 # 設置加密的cookie,設置加密必須到app的裏面去新增一個cookie_secret的參數,讓這個參數等於一個字符串(鹽) 18 self.set_secure_cookie(username, ivy) 19 20 21 # 獲取cookie 22 self.get_cookie(ivy) 23 # 獲取加密的cookie, 返回字節數據 24 self.get_secure_cookie(username)

登錄驗證

 1 from tornado.web import
RequestHandler, Application, authenticated 2 from tornado.httpserver import HTTPServer 3 from tornado.options import options, define 4 from tornado.ioloop import IOLoop 5 from util import uimethods, uimodules 6 7 define(port, default=7981, type=int) 8 9 10 class BaseHandle(RequestHandler): 11 def get_current_user(self): 12 current_user = self.get_secure_cookie(username) 13 if current_user: 14 return current_user 15 return None 16 17 18 class IndexHandle(BaseHandle): 19 @authenticated 20 def get(self): 21 self.render(index.html) 22 23 24 class LoginHandle(RequestHandler): 25 def get(self): 26 self.render(login.html) 27 28 def post(self): 29 username = self.get_argument(username) 30 password = self.get_argument(password) 31 if username == password: 32 self.set_cookie(username, password) 33 self.write(登錄成功!) 34 35 36 application = Application( 37 handlers=[ 38 (r/index, IndexHandle), 39 (r/login, LoginHandle), 40 ], 41 template_path=templates, 42 ui_methods=uimethods, 43 ui_modules=uimodules, 44 login_url=/login, 45 ) 46 47 if __name__ == __main__: 48 options.parse_command_line() 49 app = HTTPServer(application) 50 app.listen(options.port) 51 IOLoop.current().start()
  • 在登錄成功之後設置cookie
  • 新建base類,重寫get_current_user方法
  • get_current_user:當當前的cookie中有特定的值的時候,返回該值
  • 導入authenticated方法
  • 在需要檢測時候登錄的方法頁面調用該函數(裝飾器的方法)
  • 在app裏面配置一條login_url的參數,當檢測到未登錄的時候(get_current_user返回None)就讓頁面跳轉到該路由下

cookie、session、csrf