计划:
我正在开发一个大量数据库驱动的Android应用程序(例如,大多数内容是通过我的网络服务器上的RESTful服务层从MySQL数据库中提取的。)
在对API请求数据进行任何调用之前,用户必须通过将其凭据传递给数据库进行检查来进行身份验证。如果用户已经过验证,我会传回授权令牌。如果用户选择了“记住我”选项,则此令牌将保存在本地以供将来使用。
所有未来的API调用都需要包含此授权令牌。
当用户希望注销时,会将一个呼叫发送回API以从数据库中删除该令牌,从而使其无效以备将来使用。也会删除令牌的本地副本。
问题
如果用户没有注销,只是关闭应用程序(主页或后退按钮)并且没有选择“记住我”选项,我想在服务器上销毁令牌。怎么办呢?
可能的解决方案#1
onExit
事件,请调用API让其知道销毁令牌。 此方法存在以下问题:
可能的解决方案#2
time of last activity
列。如果自上次活动后拨打x min
,则该令牌将被视为已过期。此方法存在以下问题:
在每次API调用时添加了更新数据库中时间列的开销。
此外,如果用户选择记住,我现在必须存储在数据库中,因为在这种情况下令牌不能过期。
您将实施两种解决方案中的哪一种?或者是否有另一种更好的方法来实现这种机制?
如果您建议#1,请告知哪些事件符合我的目的。
答案 0 :(得分:1)
我认为这应该由服务器处理。当会话在特定的不活动时间后死亡时,服务器必须是注销用户的服务器。我不确定整个应用程序是否有监听器,如果它死了但我从未听说过。此外,用户可以始终强制终止应用程序,而无需通过任务管理器注销。
答案 1 :(得分:1)
您的第一个解决方案不适用,因为:
您最好实施第二个解决方案。肯定: