所以我正在Tornado的登录系统上工作。我最初尝试使用websockets(不起作用)并切换到常规Web服务器。我正在尝试设置一个cookie,以便我记得是否有人登录websocket。正在出现的问题是
ValuError:无效的Cookie
我查找了Tornado源代码(http://www.tornadoweb.org/en/branch2.0/_modules/tornado/web.html),这是因为匹配0x00和0x20之间的任何字符的正则表达式
if re.search(r"[\x00-\x20]", name + value):
# Don't let us accidentally inject bad stuff
raise ValueError("Invalid cookie %r: %r" % (name, value))
问题是,我总是会有这些字符,因为Hash会生成随机字节。有什么方法可以解决这个问题吗?
答案 0 :(得分:1)
该检查实际上并不严格;什么可以进入cookie中有很多限制。通常,如果要将任意二进制数据放入cookie中,则必须对其进行编码(例如,在base64中)。如果你使用tornado的secure_cookie函数,他们将为你编码数据。
另请注意,将密码哈希值存储在cookie中并不是一个好主意 - 最佳做法是生成一个存储在服务器端某处的随机会话ID并将其放入cookie中。