Я работал над этой формой , но я получил много указателей на использование подготовленного оператора, чтобы избежать sql инъекций . Во время исследования я наткнулся на этот урок . Обратите внимание, что я внес небольшие изменения в исходный код, чтобы он работал с моей существующей базой данных.
Для того, чтобы он работал, он использует 5 файлов:
login.js
$(document).ready(function(){
$error = $('<center><label style = "color:#ff0000;">Invalid email or password</label></center>');
$error2 = $('<center><label style = "color:#ff0000;">Email not found!</label></center>');
$success = $('<center><label style = "color:#00ff00;">Successfully login!</label></center>');
$loading = $('<center><img src = "loading.gif" height = "5px" width = "100%"/></center>');
$('#login').on('click', function(){
$error.remove();
$error2.remove();
$email = $('#email').val();
$password = $('#password').val();
if($email == "" && $password == ""){
$error.appendTo('#result');
}else{
$loading.appendTo('#result');
setTimeout(function(){
$loading.remove();
$.post('validator.php', {email: $email, password: $password},
function(result){
if(result == "Success"){
$('#email').val('');
$('#password').val('');
$success.appendTo('#result');
setTimeout(function(){
$success.remove();
window.location = 'home.php';
}, 1000);
}else{
$('#email').val('');
$('#password').val('');
$error2.appendTo('#result');
}
}
)
}, 3000);
}
});
});
index.php
<!DOCTYPE html>
<?php
require 'connect.php';
?>
<html lang = "eng">
<head>
<meta charset = "UTF-8" />
<style>
#content{
background-color: #ffeecc;
width:280px;
height:110px;
margin: 100px auto;
padding:10px;
border-radius:2px;
-webkit-box-shadow:0px 0px 30px 3px #000;
}
</style>
</head>
<body>
<center><h2>Creating a Simple Login using Ajax/MySQLi Prepared Statement</h2></center>
<div id = "content">
<form method = "POST">
<table>
<tr>
<td><label>Username:</label></td>
<td><input type = "text" id = "email" name= "email"></td>
</tr>
<tr>
<td><label>Password:</label></td>
<td><input type = "password" id = "password" name = "password"></td>
</tr>
<tr>
<td colspan = "2"><br /></td>
</tr>
<tr>
<td colspan = "2"><button type = "button" style = "width:100%;" id = "login">Login</button></td>
</tr>
<tr>
<td colspan = "2"><div id = "result"></div></td>
</tr>
</table>
</form>
</div>
</body>
<script src = "jquery-3.1.1.js"></script>
<script src = "login.js"></script>
</html>
connect.php
<?php
$conn = new mysqli('localhost', 'root', '', 'formularios');
if($conn->connect_error){
die("Fatal Error: Can't connect to database: ". $conn->connect_error);
}
?>
home.php
<!DOCTYPE html>
<?php
require 'connect.php';
?>
<html lang = "eng">
<head>
<meta charset = "UTF-8" />
<style>
#content{
background-color: #ffeecc;
width:280px;
height:110px;
margin: 100px auto;
padding:10px;
border-radius:2px;
-webkit-box-shadow:0px 0px 30px 3px #000;
}
</style>
</head>
<body>
<center><h2>Creating a Simple Login using Ajax/MySQLi Prepared Statement</h2></center>
<div id = "content">
<center><h2>Welcome!</h2></center>
<center><a href = "index.php" style = "text-decoration:none;">Back</a></center>
</div>
</body>
<script src = "jquery-3.1.1.js"></script>
<script src = "login.js"></script>
</html>
И validator.php
<?php
require_once 'connect.php';
$email = $_POST['email'];
$password = $_POST['password'];
$stmt = $conn->prepare("SELECT * FROM `usuarios` WHERE email = '$email' && `password` = '$password'") or die(mysqli_error());
if($stmt->execute()){
$result = $stmt->get_result();
$num_rows = $result->num_rows;
}
if($num_rows > 0){
echo "Success";
}else{
echo "Error";
}
?>
И это работает как шарм.
Теперь я хотел бы знать, как я могу проверить сессию. Я имею в виду, я включил кнопку в home.php
, чтобы пользователь мог выйти из системы. И я хочу сделать home.php
доступным только для зарегистрированных пользователей в моей базе данных. На этом сайте не будет сайта «регистрации», ИТ-менеджеры добавят учетные записи. Я видел, что если я нажму кнопку «Назад» после того, как нажму кнопку выхода, она все равно позволит мне увидеть содержимое этой страницы.
Что я должен изменить в этих сценариях, чтобы уничтожить существующий сеанс и заставить пользователей войти в систему, когда / если они вручную получают доступ home.php
?
Кнопка выхода из системы:
<a href="index.php" class="btn-primary" id="logout" name="logout">Log Out/a>