Странная проблема с Ajax, PHP и PHPCookies (xhr.readyState 0) - PullRequest
1 голос
/ 27 октября 2019

jQuery

// Submitted FormData is like this - a=value1&b=value2&c=value3

$('#formName').submit(function(e){
  e.preventDefault();
  var formData = $('#formName').serialize();
  $.ajax({
    type: 'POST',
    url: 'file.php',
    data: formData,
    cache: false,
    error: function(xhr, status, error) {
      console.log("xhr.readyState - " + xhr.readyState);
      console.log("xhr.status - " + xhr.status);
      console.log("xhr.statusText - " + xhr.statusText);
      console.log("status - " + status);
      console.log("error - " + error);
      console.log("xhr.responseText - " + xhr.responseText);
    }
  }).done(function(data) {
    console.log(data)
  })
});

PHP

<?php
  header("Cache-Control: no-cache, must-revalidate");
  header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");

  error_reporting(E_ALL);

  date_default_timezone_set('Asia/Kolkata');

  require('includes/connection.php');

  if($_SERVER['REQUEST_METHOD'] == 'POST'){

    $a = $_POST['a'];
    $b = $_POST['b'];
    $c = $_POST['c'];

    if(empty($a) || empty($b) || empty($c)){
      http_response_code(400);
      echo 'all fileds are required';
      exit;
    }else{
      http_response_code(200);
      echo 'all is good';
      exit;
    }

  }else{
    http_response_code(400);
    echo "Not Authorized";
    die();
  }
?>

Код, который установлен-Cookie

<?php
  header("Cache-Control: no-cache, must-revalidate");
  header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");

  session_start();

  error_reporting(E_ALL);

  date_default_timezone_set('Asia/Kolkata');

  require('includes/connection.php');

  if($_SERVER['REQUEST_METHOD'] == 'POST'){

    $username = mysqli_real_escape_string($scnx, strip_tags(strtolower($_POST['username'])));
    $password = $_POST['passcode'];
    if(empty($username) || empty($password)){
      http_response_code(400);
      echo 'please enter username & password';
      exit();
    }

    $sql = "SELECT username, passcode FROM admins WHERE username = '$username' LIMIT 1";
    $runSql = mysqli_query($scnx, $sql) or exit("unable to SELECT");
    $fetchCount = mysqli_num_rows($runSql);
    $fetch = mysqli_fetch_row($runSql);
    $_username = $fetch[0];
    $_password = password_verify($password, $fetch[1]);
    if($fetchCount != 1){
      http_response_code(400);
      echo 'username doesn\'t exist';
      exit();
    }else if($_password != 1 || $_username != $username){
      http_response_code(400);
      echo "Username & Passcode doesn't match";
      exit();
    }else{
      http_response_code(200);
      $_SESSION["pccadmin_username"] = hash("sha256", $_username);
      $_SESSION["pccadmin_codepass"] = $_password;
      setcookie("pccadmin_username", $_username, time()+(86400));
      setcookie("pccadmin_codepass", $_password, time()+(86400));
      exit;
    }
  }else{
    echo "Not Authorized";
    exit();
  }
?>

Выше приведен код ::

Теперь проблема очень странная, есть 2 случая с этим ::

  1. CASE 1 :: У меня естьзаметил, что при установке пользовательских файлов cookie Ajax readyState имеет значение 0 и не работает вообще. Просмотр снимка экрана

  2. CASE 2 ::Как только я очищаю пользовательские куки и запускаю тот же скрипт, все работает нормально. Просмотр снимка экрана

Пожалуйста, помогите мне с этим, я потратил 24 часа на это и перепробовал все возможные вещи - пошаговая отладка моего кода не кажется проблемой, но все жене работает.

Любые предложения будут высоко оценены.

1 Ответ

0 голосов
/ 27 октября 2019

Через 2 дня, пробуя каждый возможный сценарий, я решил его, обнаружив, что причиной проблемы является файл cookie с именем pccadmin_codepass .

Я до сих пор не знаю, что вызвалото же самое, но после изменения имени файла cookie код работает нормально.

Я нашел решение, но все же не знаю, почему ajax не отвечал, когда был установлен файл cookie pccadmin_codepass - ТАЙНА !!

Если у кого-либо есть объяснения, делитесь.

Спасибо!

...