Php 如何在移动应用程序中使用mysql连接用户?登录权限

Php 如何在移动应用程序中使用mysql连接用户?登录权限,php,android,ios,database,database-connection,Php,Android,Ios,Database,Database Connection,这是我第一次为用户交互创建数据库,我有一些“愚蠢”的问题,但我不知道如何用谷歌搜索它们以获得正确答案,因此如下所示: 我想要什么: 我想有一个数据库,那里将有写评论和文章的用户。我将有用户的关键信息,如姓名和地址,也许信用卡,我将不得不恢复它 我所做的 我已经创建了一个数据库,其中包含一个表,供用户使用它的信息,然后与一个包含注释的表和一个包含文章的表相关联 我的问题 1) 当您进行db连接时,是否每次都使用同一个用户(当然不是root用户),然后比较昵称和密码?这就是我所拥有的,但对我来说非常

这是我第一次为用户交互创建数据库,我有一些“愚蠢”的问题,但我不知道如何用谷歌搜索它们以获得正确答案,因此如下所示:

我想要什么:

我想有一个数据库,那里将有写评论和文章的用户。我将有用户的关键信息,如姓名和地址,也许信用卡,我将不得不恢复它

我所做的

我已经创建了一个数据库,其中包含一个表,供用户使用它的信息,然后与一个包含注释的表和一个包含文章的表相关联

我的问题

1) 当您进行db连接时,是否每次都使用同一个用户(当然不是root用户),然后比较昵称和密码?这就是我所拥有的,但对我来说非常奇怪,因为如果有人知道我的用户并通过连接到db,那么所有信息都将被获取。我曾想过为每个用户创建一个帐户,但我如何限制只为他们的帐户添加//删除/查看内容

2) 我已经阅读了一些问题,现在我知道我必须存储密码并将其与bcrypt进行比较。此外,我知道信用卡是不推荐存储的,所以我可能不会这样做,但对于其余的事情(地址,姓名),哪种是存储它们的最佳方式


3) 如果用户进行了连接,并且很可能会在短时间内完成更多操作,那么每次关闭和打开连接是否更好?如何控制会话?代码是用php编写的,用于将移动设备连接到mysql。

你不应该从应用程序直接连接到mysql服务器,这是一个巨大的安全漏洞。用户或黑客可以通过嗅探流量获取凭据,也可以通过反汇编应用程序获取凭据。 相反,通过PHP和https安全的HTTP POST和GET在服务器端实现


您可以在MySQL服务器中为应用程序的每个用户自动添加一个用户,但这可能要复杂得多。

首先,不要将信用卡存储在您自己的数据库中。使用类似于标记数据的东西(免费注册,任何人都可以接受)

如果你正在使用自己的用户名和密码开发一个移动应用程序,那么使用用户名/密码的远程服务器就是最好的选择。对于密码,哈希通常是比加密更好的方法,因为哈希是一种方法(您可以知道密码是否匹配,但永远无法将密码作为字符串检索)

至于连接到数据库,不要直接连接到它。通过服务器上的api/web服务执行此操作

为了从服务器获取信息,您可能需要使用json并使用GET和POST请求。下面是一个在服务器上处理登录请求的简单示例(从设备发送帖子):


我的想法是以用户身份从移动应用程序发送一些信息,或者通过https将信息传递到一个php文件,在那里我进行连接,然后通过https将信息检索到应用程序。你知道一些很好的例子吗?所以你说我要做一张有会话的桌子。我将比较user/pass,然后创建一个随机数,该随机数将存储在此“会话表”中。完成此操作后,我会将此号码发送到移动应用程序,如果移动应用程序想要进行连接,我会查找此号码、ip和日期。如果此id的ip相同,并且最后一次连接后的日期小于20分钟,则将被删除,我将创建另一个。可以吗?客户端可能只存储会话id。您可以将ip、日期和用户代理存储在数据库中,以验证客户端是您认为的用户。如果我是你,我会读一些关于cookies/会话的书:
<?php

if(isset($_POST['username']) && isset($_POST['password']))
{
  //See if the user's auth details are valid
  $auth = auth_model::try_auth(sanitizer($_POST['username']), sanitizer($_POST['password']));

  //If valid
  if($auth)
  {
    echo json_encode(other_model::some_function_that_returns_array());
    exit;
  }
  else
  {
    echo json_encode(array('error' => 'Authentication failed.'));
    exit;
  }
}