tornado cookie與認證相關

2022-06-27 06:12:08 字數 3506 閱讀 5621

目錄@authenticated 使用者認證

可以通過乙個cookie和乙個隱藏的html表單元素向頁面提供令牌。這樣,當乙個合法頁面的表單被提交時,它將包括表單值和以儲存的cookie。如何兩者匹配,則tornado應用認定請求有效。

開啟csrf防範功能需要兩個步驟:

1.例項化的時候傳入"xsrf_cookies": true引數。

settings=
2.在有表單的模板檔案中,為所有表單條件xsrf_form_html()函式標籤。

起到了為表單新增隱藏元素以防止跨站請求的左右。

cookie讀寫

tornado不自動session,但是包含cookie

cookie是很多**辨別使用者的身份而儲存在使用者本地終端(client side)的資料。在tornado中使用self.get_cookie()self.set_cookie()可以方便的對cookie進行讀寫。

import tornado.web

session_id = 1

class mainhandler(tornado.web.requesthandler):

def get(self):

if not self.get_cookie("session"):

t = time.time()+10

self.set_cookie("session", str(session_id), expires=t) # 並且設定了過期時間

self.write("設定了乙個新的session!")

else:

self.write("session已存在!")

在實際應用中,cookie經常用於儲存session的資訊。

可以設定在使用者不斷重新整理頁面的情況下,cookie不過期。

構造initialize方法:

import tornado.web

session_id = 1

class mainhandler(tornado.web.requesthandler):

def initialize(self):

if not self.get_cookie("session"):

t = time.time()+10

self.set_cookie("session", str(session_id), expires=t) # 並且設定了過期時間

self.write("設定了乙個新的session!")

else:

self.write("session已存在!")

cookie加密

因為cookie總數被儲存在客戶端,所有如何保證不被篡改是伺服器端程式必須解決的問題。tornado提供了為cookie資訊加密的機制,使得客戶端無法隨意解析和修改cookie的鍵值。

在初始化時傳入'cookie_secret' :'xsseffekrjewkhwy'做cokies加密時使用的金鑰,不能洩露出去。

get_secute_cookie替換get_cookie, 用set_secure_cookie替換set_cookie,這樣就不需要擔心cookie偽造的問題了。

import tornado.web

import tornado.ioloop

settings=

session_id = 1

class mainhandler(tornado.web.requesthandler):

def get(self):

if not self.get_secute_cookie("session"):

t = time.time()+10

self.set_secure_cookie("session", str(session_id), expires=t) # 並且設定了過期時間

self.write("設定了乙個新的session!")

else:

self.write("session已存在!")

(r"/", mainhandler)],

**settings

)if __name__ == "__main__":

tornado.ioloop.ioloop.instance().start()

在requesthandler類中有乙個current_user屬性用於儲存當前請求的使用者名稱,預設值是none,在get()、post()等處理函式中可以隨時讀取該屬性可以獲得當前的使用者名稱。

需要重寫get_current_user()方法來設定該屬性值。

基本框架**:

import tornado.web

import tornado.ioloop

class basehandler(tornado.web.requesthandler):

# 基類,重寫get_current_user方法

def get_current_user(self):

return self.get_secure_cookie("session_id")

class mainhandler(basehandler):

@tornado.web.authenticated # 能夠檢測使用者是否登入

def get(self):

name = tornado.escape.xhtml_escape(self.current_user)

self.write("hello, " + name)

class loginhandler(basehandler):

def get(self):

self.render("login.html")

def post(self):

name = self.get_argument("user")

self.set_secure_cookie("session_id", name)

self.redirect("/")

settings=

(r"/", mainhandler),

(r"/login", loginhandler)],

**settings

)if __name__ == "__main__":

tornado.ioloop.ioloop.instance().start()

框架解讀:

上面是乙個較完整的身份認證框架(可完善:使用者session儲存資料庫,密碼驗證機制等。):

login.html

springsecurity Run As認證服務

zhangxin.security.service.roleservice.loadmenu role user,run as temp zhangxin.security.runasdemo.runasdate.showdate role admin,role run as temp object...

Token Cookie Session的認識了解

token token的意思是 令牌 是使用者身份的驗證方式,最簡單的token組成 uid 使用者唯一的身份標識 time 當前時間的時間戳 sign 簽名,由token的前幾位 雜湊演算法壓縮成一定長的十六進製制字串,可以防止惡意第三方拼接token請求伺服器 還可以把不變的引數也放進token...

Jupyter Notebookde 簡單認識

這是官網上對於 jupyter notebookde的介紹。大概意思是說 基於瀏覽器的工具,用於互動式創作文件,可以用於計算 解釋文字 數學 影象和物件的富 表示的輸入和輸出。特點1 在瀏覽器中編輯 自動語法高亮,縮排,和標籤完成 自省。2 能夠從瀏覽器執行 並將計算結果附加到生成它們的 3 使用h...