我现在正在学习 udacity 的 CS253 并学习 cookie 和散列。在此我必须从响应中获取 cookie 并检查它是否与正确的匹配。这是我的代码
self.response.headers['Content-type'] = 'text/plain'
visits = 0
visit_cookie_str = self.request.cookies.get('visits')
if visit_cookie_str:
cookie_val = check_secure_val(visit_cookie_str)
if cookie_val:
visits = int(cookie_val)
但是当我在应用服务器上运行它时,我收到以下错误:
invalid literal for int() with base 10: 'visits'
我查看了这个错误的含义,我在这里遇到了很多关于同一个错误的问题,但我还没有理解为什么我的代码会显示这个错误,因为我已经将访问声明为一个 int。
这些是创建和检查哈希的函数
def hash_str(s):
return hashlib.md5(s).hexdigest()
def make_secure_val(s):
return "%s|%s" % (s, hash_str(s))
def check_secure_val(h):
val = h.split('|')[0]
if h == make_secure_val(val):
return val
我还检查了函数 check_secure_val 是否返回字符串或不使用
print check_secure_val("10|d3d9446802a44259755d38e6d163e820").isdigit()
谢谢
编辑:设置cookie的代码是
new_cookie_val = make_secure_val(str(visits))
self.response.headers.add_header('Set-Cookie', 'visits=%s' % new_cookie_val)
make_secure_val 函数以 (string, HASH) 形式返回一个字符串。
总而言之,get 函数的全部代码就是这个
def get(self):
self.response.headers['Content-type'] = 'text/plain'
visits = 0
visit_cookie_str = self.request.cookies.get('visits')
if visit_cookie_str:
cookie_val = check_secure_val(visit_cookie_str)
if cookie_val:
visits = int(cookie_val)
visits += 1
new_cookie_val = make_secure_val(str(visits))
self.response.headers.add_header('Set-Cookie', 'visits=%s' % new_cookie_val)
if visits > 100:
self.write("You're the best ever !")
else:
self.write("You've been here %s times" % visits)