2012-11-02 50 views
0

外我使用CSS3手風琴效果,我想檢測如果黑客將 使腳本做出並行請求;即: 我有一個登錄表單,並在同一頁面註冊形式,但只有 一個是可見的,因爲有一個CSS3:訪問該頁面,用戶 劑必須是HTML5兼容。 我使用的技巧是:訪問一個變量Requesthandler

class Register(tornado.web.RequestHandler): 
    def post(self): 
     tt = self.get_argument("_xsrf") + str(time.time()) 
     rtime = float(tt.replace(self.get_argument("_xsrf"), "")) 
     print rtime 
class LoginHandler(BaseHandler): 
    def post(self): 
     tt = self.get_argument("_xsrf") + str(time.time()) 
     ltime = float(tt.replace(self.get_argument("_xsrf"), "")) 
     print ltime 

我用xsrf變量,因爲它是爲每個用戶唯一的,以 避免使服務器認爲該請求來自同一 機到來。 現在我想要的:如何使時間值之間的差異: abs(ltime - rtime);意思是,我如何訪問類之外RTIME, 我只知道如何在方法外部訪問的價值,我要讓 此操作來檢測,如果該值小,則用戶使用 一個腳本,使並行請求殺死服務器! 換言之(一般蟒蛇用戶) 如果我有:

class Product: 
    def info(self): 
     self.price = 1000 
    def show(self): 
     print self.price 
>>> car = Product() 
>>> car.info() 
>>> car.show() 

1000 

但如果我另一個

class User: 
    pass 

那怎麼辦做出打印我self.price的方法,我試過 繼承,但得到了錯誤:AttributeError:用戶實例沒有 屬性'price',所以只傳遞方法,而不是屬性?

回答

1

聽起來好像您需要了解使用持久性數據存儲的模型對象和模式。 tornado.web.RequestHandler以及您從其中繼承的任何對象僅在您的請求期間存在。從服務器上收到URL到數據通過self.write()self.finish()發送回瀏覽器時。

我建議你看看一些Django的或Flask tutorials對於如何構建Python中的MVC應用程序的一些基本想法(沒有涵蓋這一點,我知道沒有龍捲風教程)。

+0

謝謝你:D,據我所知,沒有辦法避免這兩個處理程序的並行執行? –

+1

在龍捲風執行過程中,除非通過get()/ post()/請求處理程序方法上的@asynchronous裝飾器來執行它,否則將執行此操作。由於它不是多線程的,即使裝飾,你仍然只有一個執行路徑。 – koblas

+0

但如果我使用獲取時間的技巧,如果它沒有執行,那麼它是零,否則,它將是一個值,如果它是一個值,這個值不能太小,這是我的想法 –