大量用户的时候,同一个客户端请求, tornado cookie 返回了其它用户的 ID - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
maga
V2EX    Tornado

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

  •  
  •   maga 2014-12-20 16:32:28 +08:00 5784 次点击
    这是一个创建于 3950 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我通过tornado的set_secure_cookie来设置用户ID, 当有许多用户同时访问的时候,get_secure_cookie会返回其它用户的的ID.

    不知道这是不是tornado cookie API 的一个bug?
    20 条回复    2014-12-22 15:57:12 +08:00
    binux
        1
    binux  
       2014-12-20 16:47:21 +08:00
    确认不是缓存的问题吗?你能复现吗?既然你是根据 cookie 判断用户的,你怎么知道返回的是其他用户的ID?
    maga
        2
    maga  
    OP
       2014-12-20 16:52:54 +08:00
    @binux 比如访问/userid, 我在/userid 的handler里打印print userid。 在后台有许多用户同时访问的时候,我同一台手机,访问打印出来的userid不一样。 用户访问少的时候,打印出来是同一个userid.
    maga
        3
    maga  
    OP
       2014-12-20 16:54:52 +08:00
    @binux 因为每个用户的页面是不一样的,我一看就知道返回了其它用户的页面。 还比较容易复现。
    binux
        4
    binux  
       2014-12-20 17:00:48 +08:00
    @maga 既然有许多用户同时访问,你怎么知道打出来的那一条是你的?而且你 print 的时候,多进程吗? flush 了吗?
    你在哪看?你在页面上输出读到的 cookie ,看看和发送的是否一致。
    maga
        5
    maga  
    OP
       2014-12-20 17:09:45 +08:00
    @binux 我单一进程调试的,用户不是很多,我看点击的时机,还是能判断log是我的
    binux
        6
    binux  
       2014-12-20 17:13:28 +08:00
    @maga 你不是说“有许多用户同时访问的时候”,“同一台手机,访问打印出来的”
    maga
        7
    maga  
    OP
       2014-12-20 17:20:42 +08:00
    @binux 因为log只在一个handler里打印,有多个用户的时候,眼睛还是能够看得出来的。 相当于同一个浏览器,访问会打印出不同的userid log
    sujin190
        8
    sujin190  
       2014-12-20 20:17:24 +08:00
    贴个代码看看呗
    maga
        9
    maga  
    OP
       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
        11
    maga  
    OP
       2014-12-20 20:41:41 +08:00
    maga
        12
    maga  
    OP
       2014-12-20 20:44:14 +08:00
    @sujin190 不好意思,贴代码没经验。 就这个handler, 多个用户处理的时候, 对单个浏览器get_secure_cookie返回的openid会变成别人的openid
    chevalier
        13
    chevalier  
       2014-12-20 22:29:31 +08:00
    不会吧。我们这边给客户端的API,一天30亿的PV,千万的注册用户,也没发生过这种情况
    maga
        14
    maga  
    OP
       2014-12-20 22:38:26 +08:00
    @chevalier 我想也不至于有这种bug。。。 被这个问题搞死了
    ccdjh
        15
    ccdjh  
       2014-12-21 12:30:07 +08:00   1
    @livid 这里注入js了

    @maga

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


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

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

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

    gist.github.com
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1332 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 17:10 PVG 01:10 LAX 10:10 JFK 13:10
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86