2012-09-01 59 views
0

我使用gae-sessions永不过期的会话。客户端是一个iOS应用程序,我希望会话在应用程序的整个生命周期内持续存在(所以会话过期或无效的唯一方式是当用户注销或用户删除应用程序时,其他方式会话没有到期日期)。我不认为我想使用Cookie,因为Cookie是短暂的(或者我应该怎么办?)清理在谷歌应用程序引擎

所以我在做的是创建一个新的会话,获取该会话的自动生成的SID(会话ID,一个随机字符串),并将该字符串发送回客户端并将其保存在那里。现在每个用户发送请求时,会话ID也被送到了,我也得到使用该ID当前会话:

# gets the session with given session id 
session = gaesessions.Session(sid = session_id) 

首先,是什么毛病这种做法?有一个更好的方法吗?

现在,当用户注销时,可以很容易地提交给会议指定id无效的请求。但是,如果用户删除应用程序,我将无法获取该会话并删除它。那么我将如何清理不再有效的会话?

回答

1

我不知道为什么你需要一个会话的。只需将数据存储在数据存储中的某个每个用户对象中即可。然后很容易引用该用户。我假设你已经存储了会话以外的用户数据。

这个答案并不虽然解决这个问题,你永远不知道,如果一个用户删除应用程序,让您有用户数据撒手人寰。这不仅仅是一个技术问题,更是一个政策问题。

如果你想删除用户数据,你需要设置某种政策(即如果你没有在2年内登录,我们正在删除帐户)的。在这种情况下,您的到期时间基本上是2年。您需要定期运行的cron作业清理过期的用户(或会话)。

顺便说一句,GAE的会话包括用于过期会话,包括一个cron处理程序例如清理代码。