cookie、session、csrf
阿新 • • 發佈:2019-05-10
-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 importRequestHandler, 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