2016-04-04 78 views
0

由於某種原因,我無法檢索到我用龍捲風設置的安全cookie。使用螢火蟲我可以看到cookie和它的截止日期,但是當我嘗試打印或檢索它時,它會一直顯示爲無。有沒有辦法讓我無法看到它。這是我正在使用的代碼:無法檢索龍捲風安全cookie

class loginHandler(tornado.web.RequestHandler): 
def post(self): 
    # first type of request made to this page is a post 
    userEmail = self.get_argument("username") 
    password = self.get_argument("password") 
    deviceType = self.get_argument("deviceType") 

    # get some info from the client header 
    userIp = self.request.headers['X-Real-Ip'] 
    userAgentInfo = self.request.headers['User-Agent'] 

    result = pumpkinsdb.loginUser(userEmail, password, deviceType, userIp, userAgentInfo) 
    if result == None: 
     self.redirect("/") 
    else: 
     fullname = pumpkinsdb.pumpkinsdb_user['fullName'] 
     this_page_title = fullname if fullname else pumpkinsdb.pumpkinsdb_user['userEmail'] 

     # successful login set up user's cookies 
     # self.set_secure_cookie("memberId", str(user['memberId']), expires_days=0.1, secure=True, httponly=True) 
     self.set_secure_cookie("memberId", str(pumpkinsdb.pumpkinsdb_user['memberId'])) 
     self.write(str(self.get_secure_cookie("memberId"))) 

     time_now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") 
     print "{} [{}::get] pid[{}] login requested for user: [{}] from [{}] using [{}]".format(
      time_now, self.__class__.__name__, os.getpid(), pumpkinsdb.pumpkinsdb_user['emailAddress'], 
      pumpkinsdb.pumpkinsdb_user['userIp'], pumpkinsdb.pumpkinsdb_user['userAgentInfo']) 

     self.render('calendar.html', title = this_page_title) 

def get(self): 
    validSession = self.get_secure_cookie("memberId") 
    if validSession: 
     this_page_title = pumpkinsdb.pumpkinsdb_user['fullName'] 
     self.render('calendar.html', title = this_page_title) 
    else: 
     print self.get_secure_cookie("memberId") 
     self.write(str(validSession)) 

回答

1

當您重新啓動服務器時,您的cookie是否祕密發生了某種變化?如果cookie的祕密發生變化,所有現有的cookie都會失效。請注意,儘管Cookie祕密應該是隨機生成的,但這並不意味着您的代碼中應該包含類似cookie_secret=os.urandom(16)的內容,因爲每次都會生成一個新的祕密。相反,您需要撥打os.urandom一次,並將其輸出保存在某處(保持安全和私密,如TLS鍵)。

0

所以基本上這個問題是我有四個龍捲風過程的背後nginx的運行,併爲每個龍捲風過程中,我產生了一個獨特的隨機字符串:

cookie_secret = base64.b64encode(uuid.uuid4().bytes + uuid.uuid4().bytes) 

顯然,這是我的問題,因爲每個龍捲風過程中有不同的祕密所以當我試圖讀龍捲風時認爲它是無效的。

關鍵是要生成一個唯一的隨機字符串,但隨後它存儲在某處安全的,例如您選擇:

define(cookie_secret, "934893012jer9834jkkx;#[email protected]@##") 

或任何字符串你認爲合適。

謝謝大家回覆。對於那個很抱歉。