Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
AJAX和PHP返回bool和string_Php_Ajax - Fatal编程技术网

AJAX和PHP返回bool和string

AJAX和PHP返回bool和string,php,ajax,Php,Ajax,我有一个基于ajax的脚本,它完全是为了运行php脚本对用户进行身份验证而设计的。与用户身份验证一样,可能有两种结果之一:要么获得身份验证,要么不获得身份验证。 将成功或失败标记回调用它的页面非常容易,您只需echo'success'或'echo'failure'`相应地,让JS/jQuery脚本通过响应字符串处理它。(或者至少我认为这是一个很好的练习……) 但除了基本上返回true或false之外,如果它返回false,我还想返回一个消息,说明它失败的原因。用户是否存在?密码不正确吗?还是数据

我有一个基于ajax的脚本,它完全是为了运行php脚本对用户进行身份验证而设计的。与用户身份验证一样,可能有两种结果之一:要么获得身份验证,要么不获得身份验证。
将成功或失败标记回调用它的页面非常容易,您只需
echo'success'
或'echo'failure'`相应地,让JS/jQuery脚本通过响应字符串处理它。(或者至少我认为这是一个很好的练习……)

但除了基本上返回true或false之外,如果它返回false,我还想返回一个消息,说明它失败的原因。用户是否存在?密码不正确吗?还是数据库访问出错,需要吐出技术错误代码。因为我们已经用true或false进行了响应,所以我们不能将消息与false语句一起发送回去,否则从技术上讲它不是false,因为有更多的数据

现在我有了这些想法,但我觉得有更好的方法:

  • 返回一个数组
    [true/false,“String to display”]
    ,尽管它在PHP文件中看起来很笨重,并且在页面上对其进行解析
  • 当我们想要返回true时,返回
    success
    ,并将其他任何内容标记为失败,并假定它是失败的消息
但老实说,我觉得这种全文响应方法是不好的,尤其是对于用户身份验证之类的东西,因为它可能很容易被欺骗(?)那么,建议采用什么方法来实现这种效果呢


提前谢谢

这纯粹是基于观点的,但我认为在处理两个系统(如PHP(服务器)和Javascript(客户端))之间的通信时,您缺少了两个重要的概念

第一,评估响应代码。如果HTTP响应代码为200,则表示OK,201表示已创建资源(可能是会话),401表示用户未经授权。有鉴于此,仅通过HTTP响应,您应该能够判断操作是否成功

第二,使用JSON或标记语言。您可以传递一个JSON字符串来包含状态和消息,并在Javascript中解析JSON字符串

PHP中的示例如下:

http_response_code(401);
$response = [ 
'success' => false,
'message' => 'Password incorrect'
];
echo json_encode($response);

这纯粹是基于观点的,但我认为在处理两个系统(如PHP(服务器)和Javascript(客户端))之间的通信时,您缺少了两个重要的概念

第一,评估响应代码。如果HTTP响应代码为200,则表示OK,201表示创建了资源(可能是会话),401表示用户未经授权。有鉴于此,仅通过HTTP响应,您应该能够判断操作是否成功

第二,使用JSON或标记语言。您可以传递一个JSON字符串来包含状态和消息,并在Javascript中解析JSON字符串

PHP中的示例如下:

http_response_code(401);
$response = [ 
'success' => false,
'message' => 'Password incorrect'
];
echo json_encode($response);

您可以使用
JSON
轻松处理它,任何东西都可以在客户端进行欺骗。这就是为什么会话存在于服务器端的PHP中。在客户端发送什么以及如何解析完全取决于您的技能和品味,但我也建议使用JSON,因为它更易于处理/维护。注意:如果用户不存在或密码错误(提供更多的黑客选项),我永远不会具体告诉用户,我只会说just
error credentials
如果您想了解更多关于最佳实践的信息,请查看现有的PHP框架,看看它们是如何做到的。例如,Laravel刚刚添加了一个功能来限制身份验证请求:
默认情况下,如果用户在多次尝试后未能提供正确的凭据,那么用户将无法登录一分钟。限制对用户的用户名/电子邮件地址及其IP地址是唯一的。
一个很好的起点:@bansi在会话方面,所有这些都在PHP上通过会话ID、cookies和一系列其他验证进行处理,因此即使用户欺骗it客户端以通过登录窗口,由于一次不可靠的会议,它会把他们直接吐回去。此外,我从不说没有用户或密码错误,但在某些情况下,除了“帐户未激活”或“帐户已被禁用x个时间”等错误凭据之外,我还需要显示另一条消息。我认为,在这些情况下,不仅要返回失败信息,还要同时返回一条消息,这一点非常重要。您可以使用
JSON
轻松处理它,任何东西都可以在客户端被欺骗。这就是为什么会话存在于服务器端的PHP中。在客户端发送什么以及如何解析完全取决于您的技能和品味,但我也建议使用JSON,因为它更易于处理/维护。注意:如果用户不存在或密码错误(提供更多的黑客选项),我永远不会具体告诉用户,我只会说just
error credentials
如果您想了解更多关于最佳实践的信息,请查看现有的PHP框架,看看它们是如何做到的。例如,Laravel刚刚添加了一个功能来限制身份验证请求:
默认情况下,如果用户在多次尝试后未能提供正确的凭据,那么用户将无法登录一分钟。限制对用户的用户名/电子邮件地址及其IP地址是唯一的。
一个很好的起点:@bansi在会话方面,所有这些都在PHP上通过会话ID、cookies和一系列其他验证进行处理,因此即使用户欺骗it客户端以通过登录窗口,由于一次不可靠的会议,它会把他们直接吐回去。此外,我从不说没有用户或密码错误,但在某些情况下,除了“帐户未激活”或“帐户已被禁用x个时间”等错误凭据之外,我还需要显示另一条消息。我认为,在这些情况下,不仅要返回失败信息,还要同时返回一条消息,这一点非常重要