Java 禁止用户同时从两个或多个Android设备登录

Java 禁止用户同时从两个或多个Android设备登录,java,php,android,session,backend,Java,Php,Android,Session,Backend,假设我有一个Android应用程序,具有用户登录功能和基于PHP的后端服务器。当用户用相应的信息填写必填字段(例如姓名和电子邮件)并按下“登录”按钮时,向后端服务器发出请求。现在假设用户已成功登录 我的问题是,是否存在类似于web的常用机制/解决方案/设计模式 会议 在Android应用程序和服务器端之间,为了实现登录/注销等功能,防止用户同时使用同一帐户登录等?因为应用程序的不同实例可能通过同一远程服务(PHP后端)进行身份验证,跟踪身份何时通过身份验证以及来自哪个设备可能是该实现的一部分。然

假设我有一个Android应用程序,具有用户登录功能和基于PHP的后端服务器。当用户用相应的信息填写必填字段(例如姓名和电子邮件)并按下“登录”按钮时,向后端服务器发出请求。现在假设用户已成功登录

我的问题是,是否存在类似于web的常用机制/解决方案/设计模式

会议


在Android应用程序和服务器端之间,为了实现登录/注销等功能,防止用户同时使用同一帐户登录等?

因为应用程序的不同实例可能通过同一远程服务(PHP后端)进行身份验证,跟踪身份何时通过身份验证以及来自哪个设备可能是该实现的一部分。然后,您需要一种方法来跟踪用户在给定会话中的活动时间(比如在应用程序运行期间每隔一段时间发送一次“ping”)

使用此信息(上次登录、上次ping),可以准确确定某个标识是否具有活动会话,并拒绝对同一标识的后续身份验证尝试的访问


如何定义活动会话取决于实现。只要应用程序运行,只要应用程序在前台,只要用户保持与它的交互不超过某个空闲时间阈值,它就可能处于活动状态。关键是要记录并收集服务器端所有会话的信息。

为什么要使用类似于php会话的东西?改用php会话

session_start();
$sess_id = session_id();
将此id提供给客户端,并确保它出现在客户端应用程序向服务器发出的每个请求中

以下是按id加载会话的方式:

session_id("your_client_session_id");
session_start();
基本上,它的用法与web相同,只是浏览器使用cookie存储会话id

然后,如果您在客户端应用程序中使用
org.apache.http
,您应该能够使用
org.apache.http.cookie

通过这种方式,您可以在cookie中设置PHP_sessiond,并且您的应用程序将在每个请求中自动发送此消息。

许多服务将不会阻止登录,而是自动注销旧会话。这样,您就不需要麻烦额外的ping来检查它是否处于活动状态。