【发布时间】:2016-03-11 21:49:57
【问题描述】:
对于不需要任何用户名或密码的数据库,我通常通过访问 PHP 脚本从我的 Android 应用程序中的 MySQL 数据库中获取数据。要将数据发送到数据库,我将 GET 或 POST 变量发送到 PHP 脚本。
但如果我需要访问通常需要网络用户首先登录的数据库,我将如何与数据库交互?在我的 Android 应用中,用户将指定他的登录名和密码。
PHP 会话?
在通过 HTTP 请求访问某些 Web 服务器上的 PHP 脚本时,Android 应用程序能否以某种方式使用 PHP 会话?
将登录名/密码作为 GET/POST 参数发送?
在我的应用程序中,当访问我的 PHP 脚本时,是否每次我想访问受限数据时都将登录名和密码作为 GET/POST 参数发送?每次都以 GET/POST 的形式发送登录名/密码似乎有点粗略。
身份验证令牌?
或者我是否会发送一次登录名/密码进行身份验证,然后检索某种令牌,以便在后续调用 PHP 脚本时发送该令牌?我会设想它是这样工作的:
- 用户将登录信息发送到 PHP 脚本
- 认证成功后,生成随机token并放入
user表中。 - 令牌被发送回应用程序
- 随后的数据库调用包括令牌作为 GET/POST 参数。
- PHP 脚本使用令牌对用户进行身份验证并获取仅限该用户使用的数据库信息。
关于这种方法的几点说明:
- 应用程序何时将用户注销?当他退出应用程序时?当他切换到不同的应用程序时? Activity 什么时候销毁?
- 如果用户没有手动退出应用程序(这通常会从
user表中清除令牌值),那么令牌值何时被清除? - 如果用户关闭手机并失去与数据库的连接会怎样?数据库是否应该在一段时间后自动清除
user表中的token值,让随机的幸运者猜不到token? - 令牌是否也应该设置某种
last_accessed_at时间戳并在一段时间后拒绝使用令牌进行身份验证?
那里有几十个使用 Android 应用程序访问 MySQL Web 数据库的教程,但我找不到任何讨论使用凭据和/或身份验证方案的教程。
【问题讨论】:
标签: java php android mysql authentication