【问题标题】:unable to retrieve tornado secure cookie无法检索 tornado 安全 cookie
【发布时间】:2016-07-23 10:05:10
【问题描述】:

由于某种原因,我无法检索我使用龙卷风设置的安全 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))

【问题讨论】:

    标签: python session cookies tornado


    【解决方案1】:

    当您重新启动服务器时,您的 cookie 秘密是否会发生某种变化?如果 cookie 密码更改,所有现有的 cookie 都将失效。请注意,即使 cookie 秘密应该是随机生成的,但这并不意味着您的代码中应该有类似 cookie_secret=os.urandom(16) 的内容,因为这每次都会生成一个新的秘密。相反,您需要调用一次 os.urandom 并将其输出保存在某处(保持安全和私密,就像您的 TLS 密钥一样)。

    【讨论】:

      【解决方案2】:

      所以基本上问题是我在 nginx 后面运行了四个龙卷风进程,并且对于每个龙卷风进程,我生成了一个唯一的随机字符串:

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

      显然这是我的问题,因为每个龙卷风过程都有不同的秘密,所以当我试图阅读它时龙卷风认为它是无效的。

      关键是生成一个唯一的随机字符串,然后将其存储在安全的地方,例如在您的选项中:

      define(cookie_secret, "934893012jer9834jkkx;#$592920231@@##")
      

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

      感谢所有回复的人。对此感到抱歉。

      【讨论】:

        猜你喜欢
        • 2012-09-05
        • 2014-02-14
        • 2016-12-31
        • 1970-01-01
        • 2019-12-02
        • 2015-10-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多