android - 如何在 iOS 和 Android 中检测用户在给定时间是否仅在一台设备上处于 Activity 状态

标签 android ios swift

我正在开发一个应用程序,它只需要单个用户进行一个 Activity session ,无论他登录的设备如何。我还没有为此编写代码,但我想知道我是否在正确的方向方向或者有更好的方法来处理这个问题

此应用程序将始终连接到互联网,因此没有离线模式,因此这是我处理单个 session 情况的方法

  1. 从DeviceA调用登录服务时,服务器将维护一个sessionId。

  2. 如果用户从任何其他设备(DeviceB)登录,那么服务器将检查它是否来自具有 DeviceA_sessionID 的 DeviceA?如果没有,它将向 DeviceB 发送 400 BadRequest 响应,并显示一条消息“请从您登录的所有设备上注销以使用该应用程序”

  3. 服务器上的SessionId有效期可以为2天或一周。

我在这里试图解决的主要问题是我不想有任何面向设备的依赖项,因为当我们恢复出厂设置或重新安装应用程序或购买新设备时,vendorId 或任何 Id 都可能会更改。

在第 2 步中,我想终止 DeviceA session 并允许使用新 session ID 登录到 DeviceB,然后在 DeviceA 上显示一条消息,表明您的 session 已终止,这是否是一个好主意?或者只是等到 session 过期?

借助服务器上的 sessionIds,我可以确保服务器具有逻辑来确定每个用户一次只有一个设备 session 处于 Activity 状态,并且任何其他 session 都将被终止。

此外,用户更改了他们的设备,因此我假设使用 sessionId,用户仍然可以登录并为其新设备创建一个新的 sessionId,并且服务器可以终止旧设备。

请告诉我这是否是一种有效的方法,或者是否有更好的方法来处理这种情况。

最佳答案

如果您有任何类型的授权,并且允许设备 B 中断设备 A 的 session ,您可以在每次请求时刷新授权 token 。因此,在新的身份验证之后,之前设备的 session 将过期。

例如,您可以使用 JWT 授权 token 。更多 here

关于android - 如何在 iOS 和 Android 中检测用户在给定时间是否仅在一台设备上处于 Activity 状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55656039/

相关文章:

java - Android 中的 DELETE 请求无法连接到服务器

android - 如何在android中使用设备管理员应用程序阻止安装其他应用程序

android - "The following SDK components were not installed: sys-img-x86-addon-google_apis-google-22 and addon-google_apis-google-22"

ios - 我不应该在 viewDidLoad 中使用 UIButton 的 addTarget

ios - Swift:无法关闭模态呈现的 LoginViewController

swift - 使用 swift 在运行时更改 UINavigationBar 色调颜色

ios - UITableViewCell 重复值

android - 仅定位 Android 电子市场上的高分辨率(像素)设备

ios - uitableViewCell.background View 行为怪异?

ios - 在列表和详细信息 ViewController 中重用相同的 View