Я создал страницу входа в систему, в которой используются PHP и JQuery. Проблема в том, что я сталкиваюсь с 403 Forbidden ошибкой каждый раз, когда JQuery $ .ajax пытается получить доступ к файлу user_login.php.
Ниже приведены мои текущие коды:
user_index.php
<!DOCTYPE html> <html> <head> <title>Foot Steps Philippines -- User Log-in</title> <link rel="icon" type="image/png" href="images/favicon.png"> <link rel="stylesheet" type="text/css" href="styles/user_login_style.css"> <script type="text/javascript" src="jquery.js"></script> <script type="text/javascript" src="user_login.js"></script> </head> <body> <div class="login_wrapper"> <h3>Log-In</h3> <form id="fsp_login_form" name="fsp_login_form" action="user_login.php" method="POST"> <input type="email" name="fsp_email" id="fsp_email" placeholder="E-mail Address" /> <input type="password" name="fsp_password" id="fsp_password" placeholder="Password" /> <input type="submit" name="fsp_login" id="fsp_login" value="Log-In" /> <h4 id="login_message"></h4> </form> <div class="links"> <a href="">Forgot Password?</a> </div> <div class="note">*To register, please e-mail us at contact@footsteps.ph</div> <div class="footer"></div> <div class="logo"></div> </div> </body> </html>
user_login.js
$(document).ready(function(){ $("#fsp_login_form").submit(function(){ $('#login_message').html("Please wait..."); var action = $('#fsp_login_form').attr('action'); var form_data = { fsp_email: $('#fsp_email').val(), fsp_password: $('#fsp_password').val(), is_ajax: 1 }; $.ajax({ type: "POST", url: action, data: form_data, dataType: "text", contentType: "application/x-www-form-urlencoded; charset=UTF-8", success: function(response) { if ( response == 'success' ) { $('#login_message').html("Login successful!"); setTimeout(function(){ window.location.href = 'user_cpanel.php'; }, 2000); } else { $('#login_message').html("Login failed!"); } }, error: function(err) { //$('#login_message').html(err.responseText); alert(err.responseText); } }); return false; }); });
user_login.php
<?php ob_start(); session_start(); include 'conn.php'; $is_ajax = $_REQUEST['is_ajax']; $res = ""; if ( isset($is_ajax) && $is_ajax ) { $email_address = $_REQUEST['fsp_email']; $password = $_REQUEST['fsp_password']; // Protect to MySQL injection. $email_address = stripslashes($email_address); $email_address = mysqli_real_escape_string($conn, $email_address); $password = stripslashes($password); $password = mysqli_real_escape_string($conn, $password); $sql = "SELECT * FROM user_info WHERE email_address = '".$email_address."' AND password = '".$password."'"; if ( $result = mysqli_query($conn, $sql) ) { if ( mysqli_num_rows($result) > 0 ) { $client_id = 0; $premium = 0; while ( $row = mysqli_fetch_array($result) ) { $client_id = $row['id']; $premium = $row['premium_member']; } $_SESSION['client'] = $client_id; $_SESSION['premium'] = $premium; $res = "success"; } else { $res = "failed"; } mysqli_free_result($result); } else { $res = "failed"; } } else { $res = "failed"; } mysqli_close($conn); echo $res; ?>
conn.php * Примечание. Я намеренно использовал мою конфигурацию базы данных localhost. Я уже настроил его, когда я загрузил его на свой веб-хостинг-сервер.
<?php $conn = mysqli_connect("localhost", "root", "", "footstep_db"); // Check connection. if ( mysqli_connect_errno() ) { echo "Failed to connect to MySQL: ".mysqli_connect_error(); } else { // nothing to do. } ?>
Все файлы находятся в одном каталоге и все имеют разрешение 0644. Есть ли у вас идеи, как исправить ошибку? Кстати, моя страница входа в систему работает отлично при работе в localhost. Но он не работает при загрузке с моего сервера веб-хостинга. У меня нет доступа к конфигурационному файлу моего веб-хостинга и конфигурационному файлу Apache настолько, насколько это возможно, постарайтесь не дать решение, требующее реконфигурации PHP и Apache.
Благодаря 🙂
Задача решена! Я просто прошу свой веб-хостинг создать исключение для моего домена. Я думаю, что параметр mod_security их сервера вызывает 403 Forbidden Error.
Это то, что я имею в виду:
var form_data = { fsp_email: encodeURIComponent($('#fsp_email').val()), fsp_password: encodeURIComponent($('#fsp_password').val()), is_ajax: 1 };
Какой веб-сервер вы используете?
Чтобы отладить это, я попробую следующее (сначала создайте резервную копию, если вы не сможете отменить эти команды):
Apache (Ubuntu – семья):
chown www-data:www-data user_login.php chmod 777 user_login.php
Apache (CentOS – семья):
chown httpd:httpd user_login.php chmod 777 user_login.php
И попробуй еще раз. Кроме того, дважды проверьте, что ваш скрипт ищет подходящее место для вашего файла (chdir, если требуется).
Если вы все еще получаете запрет 403, проверьте свой веб-сервер access.log для соответствующих записей, и они должны дать вам подсказку, что пошло не так.