大量用户的时候,同一个客户端请求, tornado cookie 返回了其它用户的 ID

2014-12-20 16:32:28 +08:00
 maga
我通过tornado的set_secure_cookie来设置用户ID, 当有许多用户同时访问的时候,get_secure_cookie会返回其它用户的的ID.

不知道这是不是tornado cookie API 的一个bug?
5216 次点击
所在节点    Tornado
20 条回复
binux
2014-12-20 16:47:21 +08:00
确认不是缓存的问题吗?你能复现吗?既然你是根据 cookie 判断用户的,你怎么知道返回的是其他用户的ID?
maga
2014-12-20 16:52:54 +08:00
@binux 比如访问/userid, 我在/userid 的handler里打印print userid。 在后台有许多用户同时访问的时候,我同一台手机,访问打印出来的userid不一样。 用户访问少的时候,打印出来是同一个userid.
maga
2014-12-20 16:54:52 +08:00
@binux 因为每个用户的页面是不一样的,我一看就知道返回了其它用户的页面。 还比较容易复现。
binux
2014-12-20 17:00:48 +08:00
@maga 既然有许多用户同时访问,你怎么知道打出来的那一条是你的?而且你 print 的时候,多进程吗? flush 了吗?
你在哪看?你在页面上输出读到的 cookie ,看看和发送的是否一致。
maga
2014-12-20 17:09:45 +08:00
@binux 我单一进程调试的,用户不是很多,我看点击的时机,还是能判断log是我的
binux
2014-12-20 17:13:28 +08:00
@maga 你不是说“有许多用户同时访问的时候”,“同一台手机,访问打印出来的”
maga
2014-12-20 17:20:42 +08:00
@binux 因为log只在一个handler里打印,有多个用户的时候,眼睛还是能够看得出来的。 相当于同一个浏览器,访问会打印出不同的userid log
sujin190
2014-12-20 20:17:24 +08:00
贴个代码看看呗
maga
2014-12-20 20:38:00 +08:00
<code>
class ShakeOwnerHandler(BaseHandler):
def get(self, template_vars={}):
openid = self.get_current_user()
if openid is None:
code = self.get_argument('code', default=None)
if code is None:
self.redirect(KURL_SHAKEMONEY_MAIN)
return
else:
appid = APPID
appsecret = APPSECRET
openid = self.get_oauth_openid(appid, appsecret, code)
print 'owner handler oauth:' + openid
self.set_cookie_user(openid)

print 'openid:' + openid

.......
</code>
maga
2014-12-20 20:38:56 +08:00
maga
2014-12-20 20:41:41 +08:00
maga
2014-12-20 20:44:14 +08:00
@sujin190 不好意思,贴代码没经验。 就这个handler, 多个用户处理的时候, 对单个浏览器get_secure_cookie返回的openid会变成别人的openid
chevalier
2014-12-20 22:29:31 +08:00
不会吧。我们这边给客户端的API,一天30亿的PV,千万的注册用户,也没发生过这种情况
maga
2014-12-20 22:38:26 +08:00
@chevalier 我想也不至于有这种bug。。。 被这个问题搞死了
ccdjh
2014-12-21 12:30:07 +08:00
@livid 这里注入js了

@maga

self.get_oauth_openid函数是用来加盐的吧,贴一下,是这里问题么?


变量名 openid 有问题么?
Kai
2014-12-21 15:15:30 +08:00
@maga 可以直接贴 gist 地址 :)
Livid
2014-12-22 15:32:07 +08:00
@ccdjh

1. gist 地址是可以直接显示的

2. 但是因为 gist 在用 Fastly 加速,而 Fastly 因为同时也给 The Guardian 和 Twitter 提供 CDN 服务而被影响了。
maga
2014-12-22 15:52:12 +08:00
@livd 我打开这页,会一直卡在11楼好久
maga
2014-12-22 15:55:59 +08:00
@Livid 我在国内打开这页,会一直卡在11楼好久
Livid
2014-12-22 15:57:12 +08:00
@maga 你需要让你的浏览器能够直接访问 gist,也就是这个域名:

gist.github.com

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/155332

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX