0

我正在使用gae-sessions。客户端是一个 iOS 应用程序,我希望会话在应用程序的生命周期内持续存在(因此会话过期或无效的唯一方法是用户注销或用户删除应用程序时,否则会话没有过期日期)。我不认为我想使用 cookie,因为 cookie 是短暂的(或者我应该吗?)

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

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

首先,这种方法有什么问题吗?有一个更好的方法吗?

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

4

1 回答 1

1

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

但是,此答案并不能解决问题,您永远不知道用户是否删除了该应用程序,因此您将永远拥有该用户数据。这更像是一个政策问题,而不是技术问题。

如果您确实想删除用户数据,则需要设置某种策略(即,如果您在 2 年内未登录,我们将删除您的帐户)。在这种情况下,您的到期时间基本上是 2 年。您将需要一个定期运行并清除过期用户(或会话)的 cron 作业。

顺便说一句,gae-sessions 包括过期会话的示例清理代码,包括 cron 处理程序。

于 2012-09-01T04:15:37.680 回答