V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
DAOCLOUD
推荐学习书目
Python Cookbook
Using Google App Engine
推荐下载
Latest Google App Engine SDK
其他兼容技术
AppScale
sd4399340
V2EX  ›  Google App Engine

关于全局变量的疑问

  •  
  •   sd4399340 · 2011-01-06 22:58:10 +08:00 · 4599 次点击
    这是一个创建于 5094 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我想用GAE做一个Twitter web端,用户登录后自动在后台完成OAuth认证,认证后将用户名和access_token保存到数据库中。然后我需要一直保存用户名这个变量,后面响应一些请求的时候,使用这个保存的用户名去查询数据库重新获得access_token来重建twitter的api。所以这个用户名变量时跨请求的,我应该用什么保存它呢?
    我现在的做法是用全局变量,设置一个user_name=[''],然后取变量时就用user_name[0],本地调试没问题,上传后就会出现有时取不到的情况,想来可能是GAE的分布式策略造成,多instance,所以有时这个的值为空!那应该怎么解决呢?请教~
    8 条回复    1970-01-01 08:00:00 +08:00
    darasion
        1
    darasion  
       2011-01-06 23:44:56 +08:00
    全局变量应该保存那些永远不会变的,或者是很少很少会变的东西。
    如果有频繁变化,就用 memcache 。

    因为 instances 之间的全局变量没办法同步。只有等所有 instances 消亡然后再重建的时候才能同步一次;否则只能是当前的那个instance的全局变量被修改了,其他的没变。

    我也曾试图在 Twitdao 中使用全局变量保存access token 实践证明那样做只能是一个用户使用才会正常。
    Weakdancer
        2
    Weakdancer  
       2011-01-07 03:25:50 +08:00
    我的方法很笨,比如用谷歌帐户,我每次都重新获取用户。
    julia
        3
    julia  
       2011-01-07 08:42:29 +08:00
    @Weakdancer 每次users.get_current_user() 有什么问题吗?
    sd4399340
        4
    sd4399340  
    OP
       2011-01-07 13:16:06 +08:00
    @Weakdancer 原先我想得也是绑定谷歌账号,主要是考虑到万一有人没有这玩意咋办~
    sd4399340
        5
    sd4399340  
    OP
       2011-01-07 13:18:05 +08:00
    @darasion memcache的机制我不大懂啊,我如果全用cookie怎么样,第一次登录就把用户名记录在cookie里,然后用到的话就去取,这样自己的用户名保存在自己的电脑里应该可以行得通吧!取到用户名以后去数据库里去对应的access_token,这思路行吗?
    sd4399340
        6
    sd4399340  
    OP
       2011-01-07 13:19:10 +08:00
    @julia 我想@Weakdancer的意思大概是指,每次获取谷歌账号后,再去获取对应的twitter账号,然后再完成一次Oauth认证吧~
    Weakdancer
        7
    Weakdancer  
       2011-01-07 14:59:59 +08:00
    @sd4399340
    @jula

    我就是这个意思,我做的东西全是使用的google帐号

    一部分原因是暂时不会处理cookies

    不过看了@keakon说的
    https://github.com/dound/gae-sessions

    自己构建用户认证

    实际上我现在也不是太清楚memcache


    就算自己构建cookies原理和使用谷歌账户认证基本是一样的吧。

    不会memcache的话就在每个方法的最开始获取用户信息就好了。
    sd4399340
        8
    sd4399340  
    OP
       2011-01-07 15:42:14 +08:00
    @Weakdancer 我也在看gae-sessions呢,这个好像能满足要求啊~
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2996 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 14:15 · PVG 22:15 · LAX 06:15 · JFK 09:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.