如何管理从PHP中的移动应用程序登录的用户的会话?

2020/12/16 01:51 · ios ·  · 0评论

我是专业PHP程序员因此,我对iOS和Android编码一无所知。

该方案是使用一个名为“ PHPFox”的社交网络PHP软件开发的网站

现在有两个类似的移动应用程序,它们完全复制了该网站的功能。一个移动应用程序在iOS中,另一个在Android中。

因此,我编写了一组RESTful API,用于接收来自移动应用程序的请求,解析请求,将请求参数传递给对网站执行相同工作的函数,从该函数获取响应,然后将其转换转换为JSON格式,然后将其发送回移动应用。对于iOS和Android应用程序,我正在使用同一组REST API文件。

用户登录时,将调用用于登录的REST API。最终,调用了用于身份验证的PHPFox函数,并与其他一些用户数据一起生成了安全令牌。每次登录时,PHPFox都会生成不同的安全令牌。此数据设置到会话中。现在,每次我通过任何REST API文件调用任何函数时,都会验证登录时生成的安全令牌,并且只有在成功验证令牌后,才会调用PHPFox函数。该验证过程由PHPFox在内部完成。因此,无需将安全令牌显式或隐式传递给任何REST API调用。

到现在为止,一切正常。

我的怀疑从这里开始。我不知道会话是否在iOS / Android应用程序中维护。因此,如果服务器上的会话(即PHPFox)超时,那么应用程序将如何处理?会崩溃吗?用户是否需要再次登录?如果用户杀死了设备上的应用程序并再次访问该应用程序,他/她是否需要再次执行登录过程?

我心中有太多疑问。我对这些事情完全感到困惑。

有人可以请我把重点更多地放在我面临的问题上吗?如果您可以详细解释,那将是非常不错的。

谢谢。

REST本质上是无会话的。用户登录时需要生成令牌。您必须将此令牌保存在移动客户端上。对于每个请求,您都需要在请求标头中附加一个有效的令牌,并在服务器端进行检查。如果令牌到期,则存储在客户端上的令牌无效。因此,由于401响应,您需要再次登录。如果令牌不正确,则需要回复400。我希望对您有所帮助。

与网络浏览器不同,iOS和Android应用程序无法维护会话。通常,一旦用户登录(从服务器验证登录凭据),其登录凭据就会保存在客户端。然后,应用程序使用较少会话的REST api调用从服务器获取数据。这就是在移动应用程序中完成此操作的方式。

但是,如果您希望服务器会话和移动应用程序并驾齐驱(我认为这不是一个好主意),则方法是

1)用户登录时,服务器端会生成一个安全令牌,并同时保存在服务器端和客户端上。

2)只要安全令牌有效,移动应用就可以与服务器通信。

3)会话过期时,安全令牌将变为无效。现在,服务器和客户端之间必须对会话过期时的响应有了一定的了解。现在,移动应用程序必须再次将用户重定向到登录页面。用户将再次登录,然后与服务器通信。每当会话过期时,都应该发生这种情况。

如果您正在使用Oauth 2进行认证,则以下是常见设置:

  • 用户登录移动应用
  • 如果凭据正确,则服务器返回访问令牌,刷新令牌和令牌的生存期
  • 移动应用程序存储这些值+当前时间戳
  • 在服务器端,将垃圾收集器配置为清除过期的令牌
  • 在进行任何api调用之前,移动应用程序将检查令牌是否即将过期(借助存储的值)。如果令牌即将过期,则应用会发送刷新令牌,指示服务器生成新的访问令牌
  • 如果您希望用户保持连接状态,则可以将应用配置为定期检查访问令牌,如果过时则请求新的令牌

希望这可以帮助。

干杯

您的服务器应该完全无状态,因此不应存储任何会话。.REST API实际上只是具有可选安全性(通过令牌)的数据抽象层。

因此,您的API公开了一个身份验证服务,该服务将以授权令牌响应,以便在后续请求中将其用作标头,此令牌应与每个用户为1to1关系,并且是通用唯一。它也应该有一个到期时间,届时您的服务器会以适当的错误响应进行响应,以请求您的应用刷新令牌,这可以通过单独的刷新令牌系统完成,也可以要求用户再次登录以刷新令牌。

应该维护状态的是APP,而不是服务器。服务器仅用于数据目的,因此不应依赖于任何基于会话的身份验证。

您不必担心移动开发方面的会话。在Android中,我们使用SharedPrefrenceand NSUserDefaults(标记在本地维护会话)。

我没有使用PHPFox的经验,但这是移动前端理想上应该如何处理问题的方式:

情况1:移动应用主动与服务器通信:

  • 会话超时戳不断增加,会话保持活动状态。

情况2:移动应用程序在没有任何服务器通信的情况下处于活动状态(例如,来电,在应用程序之间移动等):

  • 服务器会话可能会超时,也可能不会超时。
  • 如果超时,则对服务器的下一个查询将使身份验证失败并返回错误。
  • 应用程序会消耗此错误,并通过一条消息提示用户登录,优雅地重定向到登录屏幕。(这发生在我的银行应用中)

情况3:用户杀死设备上的应用并重新启动该应用:

  • 应用程序应将令牌存储在sqllite或共享首选项中。(始终登录的应用程序都采用这种方法)
  • 重新启动后,应用程序可以使用持久令牌查询服务器。
  • 如果会话仍然存在,则通信将继续,并且用户可以继续。否则,用户将进入情况2的登录屏幕。

会话是驻留在服务器上的“东西”。它可以是一个存储有关用户详细信息的对象(例如,会话ID,用户名,电子邮件地址...)或处理将来的请求所需的任何其他数据(例如购物车详细信息,送货地址...)。

“东西”通常是一个对象,可以存储在内存中,数据库中,甚至可以序列化并保存到文件系统中(我相信这是PHP中的默认设置)。

因此,当您说“我不知道会话是否在iOS / Android应用程序中维护”时,恐怕这没有任何意义。只有服务器可以维护会话。

通常,客户端(Web浏览器或移动应用程序)唯一会知道的是会话ID(以令牌或GUID的形式)。这是客户端/应用唯一需要记住的事情,它需要与任何请求一起发送到服务器。

它可以存储为cookie和/或作为请求标头发送到服务器。

然后,服务器将从cookie或标头中读取会话ID /令牌,并将从其存储会话的位置(文件系统,内存或数据库)检索会话详细信息。这就是您打电话时在幕后发生的事情session_start()

要了解有关会话处理以及如何创建自定义会话处理程序的更多信息(在您的情况下,可能需要从请求标头中获取令牌):http :
//php.net/manual/en/function.session-start.php

本文地址:http://ios.askforanswer.com/ruheguanlicongphpzhongdeyidongyingyongchengxudengludeyonghudehuihua.html
文章标签: ,   ,   ,   ,  
版权声明:本文为原创文章,版权归 admin 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!