关于全局变量的疑问

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

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

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

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

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

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

自己构建用户认证

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


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

不会memcache的话就在每个方法的最开始获取用户信息就好了。
sd4399340
2011-01-07 15:42:14 +08:00
@Weakdancer 我也在看gae-sessions呢,这个好像能满足要求啊~

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

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

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

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

© 2021 V2EX