Ciao, rieccomi a scocciare con le mie domande, ho creato un db mysql per registrare degli utenti a cui viene permesso l'accesso a determinate pagine, ma mi sono accorto che se ad esempio, apro una sessione dal pc di casa e subito dopo apro una nuova sessione dal celluare, quindi con altro ip ma con stesse credenziali di accesso, riesco tranquillamente ad avere due sessioni aperte in contemporanea. Dalla lettura di vari post in rete oltre che su questo forum, da quello che ho capito dovrei creare una colonna sul db nella tabella loginattemps e questo non è un problema, ma qui mi blocco. La mia domanda è: Una volta creata la tabella, come faccio a farla funzionare?
Questa e la struttura della tabella:
Questa e la struttura del file per il login:
ed infine il file di controllo login
Questa e la struttura della tabella:
Codice:
CREATE TABLE `members` (
`id` char(23) NOT NULL,
`username` varchar(65) NOT NULL DEFAULT '',
`password` varchar(65) NOT NULL DEFAULT '',
`email` varchar(65) NOT NULL,
`verified` tinyint(1) NOT NULL DEFAULT '0',
`mod_timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `username_UNIQUE` (`username`),
UNIQUE KEY `id_UNIQUE` (`id`),
UNIQUE KEY `email_UNIQUE` (`email`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `loginAttempts` (
`IP` varchar(20) NOT NULL,
`Attempts` int(11) NOT NULL,
`LastLogin` datetime NOT NULL,
`Username` varchar(65) DEFAULT NULL,
`ID` int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Questa e la struttura del file per il login:
PHP:
<?php
session_start();
if (!isset($_SESSION['username'])) {
header("location:login/main_login.php");
}
ed infine il file di controllo login
PHP:
<?php
//'true' triggers login success
ob_start();
include 'config.php';
require 'includes/functions.php';
// Define $myusername and $mypassword
$username = $_POST['myusername'];
$password = $_POST['mypassword'];
// To protect MySQL injection
$username = stripslashes($username);
$password = stripslashes($password);
$response = '';
$loginCtl = new LoginForm;
$conf = new GlobalConf;
$lastAttempt = checkAttempts($username);
$max_attempts = $conf->max_attempts;
//First Attempt
if ($lastAttempt['lastlogin'] == '') {
$lastlogin = 'never';
$loginCtl->insertAttempt($username);
$response = $loginCtl->checkLogin($username, $password);
} elseif ($lastAttempt['attempts'] >= $max_attempts) {
//Exceeded max attempts
$loginCtl->updateAttempts($username);
$response = $loginCtl->checkLogin($username, $password);
} else {
$response = $loginCtl->checkLogin($username, $password);
};
if ($lastAttempt['attempts'] < $max_attempts && $response != 'true') {
$loginCtl->updateAttempts($username);
$resp = new RespObj($username, $response);
$jsonResp = json_encode($resp);
echo $jsonResp;
} else {
$resp = new RespObj($username, $response);
$jsonResp = json_encode($resp);
echo $jsonResp;
}
unset($resp, $jsonResp);
ob_end_flush();
Ultima modifica di un moderatore: