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

PHP*_*ver 41 php session android ios phpfox

我是一名专业的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超时,那么应用会发生什么?它会崩溃吗?用户是否必须再次登录?如果用户杀死设备上的应用程序并再次访问应用程序,他/她是否必须再次执行登录过程?

我心中有太多疑惑.我完全混淆了这些事情.

有人可以把更多的注意力放在我面临的问题上吗?如果你能详细解释那将是非常好的.

谢谢.

val*_*omo 55

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

  • 您描述的令牌听起来与会话ID完全相同. (3认同)
  • 是的,但只是告诉我一件事你可以检查大多数Android应用程序,他们从来没有要求再次登录现在他们没有设置任何到期时间或他们做什么? (2认同)
  • 也许他们可以开发一个系统来了解令牌是否过期,然后将令牌返回给它的应用程序.或者令牌永不过期.我建议你阅读一些有关oauth的内容. (2认同)

Faw*_*sud 20

与Web浏览器不同,iOS和Android应用程序无法维护会话.通常,一旦用户登录(从服务器验证登录凭据),其登录凭据将保存在客户端.然后,应用程序使用无会话的REST api调用从服务器获取数据.这就是移动应用程序的主要功能.

但是,如果你想要服务器会话和移动应用程序齐头并进(我认为这不是一个好主意),方式是

1)当用户登录时,在服务器端生成安全令牌,并保存在服务器端和客户端.

2)只要安全令牌有效,移动应用程序就能与服务器通信.

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

  • 该会话适用于iOS但不适用于Android (3认同)

小智 15

如果您使用Oauth 2进行身份验证,则常见设置如下:

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

希望这可以帮助.

干杯

  • 如果有人可以窃取你的令牌然后他/她也可以窃取你的刷新令牌,那么刷新令牌的用途是什么? (5认同)

Rag*_*420 8

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

因此,API会公开一个身份验证服务,该服务将使用授权令牌进行响应,以便在后续请求中用作标头,此标记应与每个用户保持1to1关系,并且Universum Unique.它也应该有一个到期时间,此时您的服务器会响应相应的错误响应,请求您的应用刷新令牌,这可以通过单独的刷新令牌系统完成,或者请求用户再次登录以刷新令牌.

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