首页 > 解决方案 > PHP + Android - 如何知道哪个用户正在尝试登录以及他是否已登录

问题描述

我有一个具有初始登录屏幕的 Android 应用程序,将凭据发送到 PHP 服务器。之后,我想访问需要用户登录的服务器的其他部分。我知道与 Web 浏览器不同,我无法存储会话数据。

当我访问这些部分时,服务器如何确保用户是用户,并且他已登录?

我在想什么: 从堆栈溢出中的问题/答案来看,正确的方法是,当用户成功登录时,我们给他一个身份验证码,服务器和客户端都存储该代码,然后当我需要时做一些需要我登录的事情我发送该代码和服务器查看是否发生匹配。

我的疑问是关于比赛过程。假设它就像存储在服务器端的数据库中一样,我们拥有与用户名关联的代码。 是否有可能(但不太可能?)可以为两个不同的用户生成重复的代码?然后我应该确保在数据库中每个代码在添加之前都是唯一的,还是像加密的用户名一样添加到代码中,以便每个代码都不同?还是生成两个相等的验证码的概率太低以至于无关紧要?

另外,我应该如何在 Android 端存储身份验证代码,假设当我关闭应用程序时我想获取身份验证代码并且不必重新引入凭据?或者这是不好的做法?

感谢您的阅读。

标签: android

解决方案


您可能想使用令牌。

当用户第一次登录时,你给他们一个令牌 - 如果凭据是正确的。从那时起,用户将为每个请求使用该令牌。在后端,您可以设置一个调度程序以在一段时间后清理这些令牌。

是否有可能(但不太可能?)可以为两个不同的用户生成重复的代码?

如果您的实施不正确,则有可能。这是您应该注意的事情 - 或者您可以使用一个包,它将负责大部分身份验证部分。像OAuth

然后我应该确保在数据库中每个代码在添加之前都是唯一的,还是像加密的用户名一样添加到代码中,以便每个代码都不同?

如果您要使用身份验证包,那么您不必关心它 - 很可能。否则,您可以将该字段设置为数据库中的唯一字段。

还是生成两个相等的验证码的概率太低以至于无关紧要?

能够识别您的用户始终很重要。例如,网站上的管理员和客户端用于存储在同一个用户表/集合/任何内容中。如果您为管理员和客户端生成相同的令牌,那么在权限检查期间您可能只从数据库中取回一条记录 - 假设它是唯一的并且管理员最终将获得客户端权限或其他方式大约。


推荐阅读