Как создать правильную переменную Session для сайта на базе WordPress - PullRequest
0 голосов
/ 11 февраля 2020

Я делаю собственный скрипт для ограничения частного сайта, пользователю нужен код доступа и его фамилия для доступа к сайту. Webiste, созданный с помощью WordPress, в то время как учетные данные для ограничения были получены из внешнего php приложения.

У меня есть два файла, один из которых является home. php, а другой - autho. php. Форма входа находится в доме. php, где на форме и Ajax код написано их. Autho. php - это серверный скрипт и создающий сеанс для ограничения сайта WordPress.

Проверка сеанса происходит в файле /wp-content/themes/twentynineteen/header.php. В области сайта WordPress я не могу найти данные сеанса, которые были созданы при авторизации. php. Пожалуйста, предложите.

home. php (форма входа)

<script type='text/javascript'>
$(document).ready(function(){
 $('#login_error').hide();
 $('#accessform').on('submit', function(event){
  event.preventDefault();
  $.ajax({
   url:"doctor_autho.php?action=login&type=login",
   method:"POST",
   data:$(this).serialize(),
   dataType:"json",
   beforeSend:function(){
    $('#submit').attr('disabled', 'disabled');
   },
   success:function(data)
   {
     if(data.result = 'false')
     {
      $('#login_error').show();
      $('#login_error').html("<strong> Doctors last name or code is invalid </strong>");
      $('#submit').prop('disabled', false);
     }
     if(data.result = 'true')
     {
      $('#login_error').show();
      $('#login_error').html("<strong> Access Granted !!! </strong>");
        window.location.href = "/index.php");
     }
    $('#submit').attr('disabled', false);
   },
   error: function (response) {
     $('#login_error').show();
        $('#login_error').html("<strong> Doctors last name or code is invalid  </strong>");
        $('#submit').prop('disabled', false);
    }
  })
 });
});
</script>

autho. php PHP file

$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error){
    die("Connection failed: " . $conn->connect_error);
}
$type = isset($_GET['type'])?$_GET['type']:"";
$action = isset($_GET['action'])?$_GET['action']:"";
if(isset($_POST) && $action == "login" && $type=="login"){ 
  $doctor_invitation_code= isset($_POST['doctor_invitation_code'])?$_POST['doctor_invitation_code']:"";
  $doctor_last_name= isset($_POST['doctor_last_name'])?$_POST['doctor_last_name']:"";
  if($doctor_invitation_code =="" OR $doctor_last_name ==""){
    $data = array("result" => "false", "msg" => "Parameter is required");
    die(json_encode($data));
  }else{    
    check_login($doctor_invitation_code,$doctor_last_name);     
  }
}else{
    $data = array("result" => "false", "msg" => "Parameter wrong used!");
    die(json_encode($data));
}
function check_login($doctor_invitation_code,$doctor_last_name){
    Global $conn;
    $doct_auto_query ="SELECT * FROM `tbl_user_master` WHERE patient_invition_code='".$doctor_invitation_code."' AND user_lname='".$doctor_last_name."' AND user_type='2' and is_deleted=0 limit 1";
    //echo $doct_auto_query;    
    $result = $conn->query($doct_auto_query);
    if($result->num_rows > 0){      
        $data = array("result" => "true", "msg" => "Access Granted !!!");
        session_start();
        $_SESSION['invitation_code'] = $doctor_invitation_code;
        $_SESSION['last_name'] = $doctor_last_name;     
        die(json_encode($data));
    }else{
        $data = array("result" => "false", "msg" => "The Invitation code or Last Name is wrong used!");
        header ("Location: home.php");
        die(json_encode($data));
    }
}

Проверка сеанса по заголовку темы. php file

session_start();

if (!isset($_SESSION['invitation_code']) && !isset($_SESSION['last_name']) ) {
   header("Location: https://www.website.com/home.php");
} 

На сайте WordPress под файлом заголовка темы я не могу получить доступ к $ _SESSION ['приглашение_коду] '] и $ _SESSION [' last_name '] там, пожалуйста, предложите, как это исправить.

1 Ответ

0 голосов
/ 13 февраля 2020

Сначала поставьте session_start (); в wp-config. php file.

define( 'WP_SESSION_USE_OPTIONS', true );
session_start();

Ваш JQuery как-то так

<script type='text/javascript'>
$(document).ready(function(){
     $('#login_error').hide();
     $('#accessform').on('submit', function(event){
      event.preventDefault();
      $.ajax({
       url:"autho.php?action=login&type=login",
       method:"POST",
       data:$(this).serialize(),
       dataType:"json",
       beforeSend:function(){
        $('#submit').attr('disabled', 'disabled'); 
       },
       success:function(data)
       { console.log(data);

         if(data.result =="true") {
          $('#login_error').show();
          $('#login_error').html("<strong> "+data.msg+" </strong>");
          window.location.href = "index.php"; 
          return false;      
         }      
         if(data.result == "false") {
          $('#login_error').show();
          $('#login_error').html("<strong> "+data.msg+" </strong>");
          $('#submit').prop('disabled', false);
          return false;
         }       
        $('#submit').attr('disabled', false);
       },
       error: function (response) {
         $('#login_error').show();
            $('#login_error').html("<strong> There is an error!  </strong>");
            $('#submit').prop('disabled', false);
        }
  })
 });
});
</script>

Ваш PHP закодируйте что-то вроде этого

    <?php
    $con = mysqli_connect("127.0.0.1","dbuser","dbpassword","dbname");
    if (mysqli_connect_errno()) {
      echo "Failed to connect to MySQL: " . mysqli_connect_error();
      exit();
    }

    $doctor_last_name = mysqli_real_escape_string($con, $_POST['doctor_last_name']);
    $password = mysqli_real_escape_string($con, $_POST['doctor_invitation_code']);
    if($doctor_last_name !="" && $password !=""){   
            $query ="SELECT * FROM `tbl_user_master` WHERE  is_deleted=0 AND user_type='2' "; 

            if($doctor_last_name !=""){
            $query .=" AND user_lname='".$doctor_last_name."' ";
            $data=mysqli_query($con, $query);
            if ($data){
            if (mysqli_num_rows($data) == 0){
            $data = array("result" => "false", "msg" => "The Last Name is invalid.");
                  }
             }
            }
            //end 
            //validation for invitation code 
            if($password !=""){ 
            $query .=" AND patient_invition_code='".$password."' "; 
            $data=mysqli_query($con, $query);
            if ($data){
            if (mysqli_num_rows($data) == 0){
            $data = array("result" => "false", "msg" => "The Invitation Code is invalid.");

            }
            }
            } 

            $data=mysqli_query($con, $query);       
            if ($data){         
                if (mysqli_num_rows($data) > 0){
                    session_start();
                    $_SESSION['invitation_code'] = $password;
                    $_SESSION['last_name'] = $doctor_last_name;
                    $data = array("result" => "true", "msg" => "Access Granted !!!");
                    echo json_encode($data);

                    exit(); 
                }else {
                //validation of code and lastname only
                $data = array("result" => "false", "msg" => "The Last name & Invitation Code is invalid.");
                echo json_encode($data);
                exit();
                }
            }       
    }else{
    $data = array("result" => "false", "msg" => "Parameter is required.");
    echo json_encode($data);
    exit;   
    }
    reset($doctor_last_name);
    reset($password);
    mysqli_close($con);
    exit;

    ?>

И наконец, вы можете поместить проверку сеанса в любой заголовочный файл вашей темы WordPress.

session_start();

if(!isset($_SESSION['invitation_code']) || $_SESSION['invitation_code'] == '') {
   header('location:home.php');

} 
...