2016-04-04 81 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]@##") 

或任何字符串你认为合适。

谢谢大家回复。对于那个很抱歉。