1

我们的 API 返回一个用户身份验证代码,该代码具有会话到期(30 分钟不活动)。因此,如果我们使用身份验证令牌进行 api 调用,它会将会话更新到调用时间后的 30 分钟。

在 30 分钟不活动后,api 返回一个错误,指出令牌已过期。此时我们应该请求一个新的身份验证令牌。

但是,这样做的明显方法(向用户显示登录屏幕并让他们再次登录)将意味着在应用程序的某些功能中间切断用户。

例如,我们有各种带有选项和输入的视图控制器,它们在流程结束时聚合并提交一个完整的 API 调用。如果在用户填写这些输入和视图时服务器上的会话到期,那么在进行 API 调用时他们将被注销,并且他们将失去在这些视图中的进度。

有两种可能的解决方法:

  1. 我们自己在应用程序中设置了计时器,以确保用户在应用程序不活动 30 分钟后退出。这意味着它们不会在一组输入期间被注销,但这会带来以下问题:即使我们正在运行自己的计时器,服务器 API 仍可能过期。因此这是行不通的。

  2. 我们每 10 秒左右轮询一次服务器,询问 API auth 令牌是否仍然有效。这会消耗电池、数据和各种东西,而且不是做这样的事情的合理方式。

有没有人有任何想法?

谢谢汤姆

4

1 回答 1

1

根据您的描述,这听起来像是一个经典的交易失败问题。万一您不熟悉事务处理,“事务处理的基本要素是该主题的入门读物。

如果您有能力修改后端系统,您将需要确保 ACID 后端。

这可能意味着在客户端上构建数据,并且在您完成交易之前不将数据发送到服务器。这样,如果会话超时,客户端仍然拥有完成事务所需的所有数据。(利用原子性)

这可能意味着拥有交易令牌。在创建新会话时,客户端可以向服务器发送事务令牌,并且事务的状态在新会话中恢复。(利用耐用性)

对我来说,这两个选项都比清除现有事务并迫使用户重新开始要好。

希望有帮助。

于 2012-11-21T14:59:35.360 回答