2016-10-22 89 views
0

我对处理保持用户登录应用程序的最佳方式有疑问。我想知道如何实现与Snapchat等应用程序类似的功能,即使在用户关闭/打开手机时也能保持用户登录状态。我是否认为他们在设备上本地存储授权密钥以达到此目的?我从来不想登录用户,除非他们点击“注销”按钮,但我没有使用授权密钥的经验,以保持人们登录。这种验证/登录用户的方法是否安全?

所以我想知道如果下面的方法将是一个很好的方法使用,或者如果它不安全/将采取什么更好的方法。 首先,我在我的数据库中有一个表格,内容如下: device_id,用户名,密码,logged_in。

我目前的方法:

  • 当应用程序启动时,获取设备的唯一ID。
  • 使用Javascript/php将ID发送到数据库。
  • 使用SQL检查数据库中的ID。
  • 如果ID不在数据库中,或者,如果与该ID相关联的“logged_in”列表示“0”(表示未登录),那么这意味着它是新设备/并且可能是新用户或用户当前从该设备注销(由于在前一个会话结束时按下“注销”按钮 - “注销”按钮将“logged_in”列更改为“0”)。
  • 因此,该应用程序现在向用户提供输入登录详细信息(用户名&密码)的选项,或注册应用程序(创建用户名&密码)。
  • 如果这些进程是成功的,数据库更新,并且用户可以使用的应用程序(以下简称“LOGGED_IN”一栏被改成“1” - 这意味着用户登录)。
  • 每当用户打开应用程序,如果他们的ID在数据库中,并且关联的“logged_in”列=“1”,则不需要登录屏幕,他们已经登录并且可以立即访问应用程序。
  • 如果某人在一台设备上登录其帐户,但获取了新设备并登录该设备(使用其用户名和密码),则其存储的设备ID将被其新设备ID覆盖。 - 这应该使它们显示在他们自己的设备上(因为他们的旧ID不会被发现,所以他们会被提示重新输入他们的用户名和密码,如果他们回到他们的旧手机)。

这是一个稳定和安全的方法来验证用户的详细信息,并保持人们登录到应用程序?他们仍然能够通过按下“注销”按钮注销他们,他们会将“logged_in”列从“1”更改为“0”。但是这种方法可能存在缺陷?我真的很感激任何建议,最好的方式来做到这一点。提前致谢!

回答

0

设备的唯一ID将通过互联网。如果有一个节点监听您的通信,它将获得设备的所有唯一ID,因此您需要对它们进行加密,所以如果数据以任何方式被第三方收听,至少不会把他们的原始数据交给他们另外,我会使用一个腌制的加密程序,所以即使第三方能够对算法进行逆向工程,结果也远没有真正的价值。我会选择一个离散名称,这对第三方来说并不意味着什么。

通常情况下,没有用于登录状态的标志,相反,当用户正确登录时,某些值存储在$_SESSION中,如user_id。一般来说,客户端为此目的使用cookie,并且您可以通过Javascript修改cookie值。如果这不适合你,那么你不必使用一般的方法,但是永远不要在没有模糊的情况下发送独特的设备id。

相关问题