好的...所以我有一个连接到PHP后端的快速应用程序。用户登录后,它会在服务器上存储一个会话,并在应用程序的cookieStorage中设置一个加密的cookie(我还将该cookie存储在钥匙串中,因为cookieStorage可能会因我所说的而变化)。我还将用户名和密码存储在钥匙串中。
服务器上的会话在不使用一段时间后过期(假设30天),但如果用户回来,会话将在30天以后更新。所以例如...让我说我不会回来15天......我的会话现在重置为1天,并且有30天到期...但是,如果我在第31天回来,我必须重新登录网络应用程序。
这个应用程序中有几个viewcontrollers需要用户登录(一对是使用cookie访问服务器上的数据的uiwebviews ...这些都不是问题,因为他们处理会话就像一个默认情况下冠军)。然而,需要用户登录的本机视图(tableview等)是另一回事。
目前,在登录时,我在NSUserDefaults中设置了一个用户登录的开关...在didFinishLaunchingWithOptions中,我只是检查以确保用户已登录...如果他们已登录,我们将他们移入应用程序的“私有”区域,如果他们未登录,我们会将其移至登录屏幕(或注册屏幕)。
所有这一切都很好......但是随着服务器上的会话到期,我想知道在iOS应用程序中处理这个问题的适当方法是什么?我希望他们保持登录状态,直到他们选择其他方式,但如果应用程序保持关闭状态31天,则服务器上的会话将不再有效。我想我可以在UserDefaults中设置一个日期(上次打开应用程序)或类似的东西,如果他们在30天内没有打开应用程序,那么我可以使用存储在钥匙串中的用户名和密码来将它们重新登录到PHP后端并刷新它们的会话并重置存储的登录日期(如果密码不再有效,我当然会重定向到登录视图)。
在iOS应用中是否有更合适的方法来处理这个问题,或者这听起来像是一种有效的方法?日期/会话检查应该在didFinishLaunchingWithOptions
以及applicationDidBecomeActive
吗?
答案 0 :(得分:1)
首先,不要存储与userDefaults
中的登录状态有关的任何内容。
其次,由于您将用户名和密码存储在钥匙串中,为什么不在每次打开应用程序时检查钥匙串并记录用户。这将为用户提供持久登录,直到他们退出,然后您可以清除钥匙串。此外,这将为您提供另一个分析点,您可以将其存储在数据库中,以便每次用户打开您的应用时都知道。
您是否有理由要30天到期?