Verificare se un utente è connesso tramite db mysql

giannit

Nuovo Utente
30 Mar 2017
31
2
8
58
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:

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:

xone

Utente Attivo
4 Apr 2014
181
14
18
Salento
Ciao, potresti anche creare al login una sessione chiamata con lo stesso nome dell'username, e poi fare un controllo con un if se quella sessione esiste blocchi, se non esiste procedi.
 

giannit

Nuovo Utente
30 Mar 2017
31
2
8
58
Grazie della risposta, sinceramente sono molto confuso a forza di leggere. Il mio obiettivo finale e quello di impedire in qualche modo, che ci si possa loggare contemporaneamente con la stessa user e password da due diversi dispositivi. In pratica, dato il tipo di sito che ho realizzato, non vorrei trovarmi con 10 utenti in possesso di dati di accesso e 20 persone online, come sembra stia accadendo.
 

xone

Utente Attivo
4 Apr 2014
181
14
18
Salento
Ma a te serve poter rilevare le persone online nel tuo sito? Altrmenti potresti creare una nuova tabella nel db (lastlogin) e memorizzare l'username che si è connesso, cosi al login oltre a verificare la correttezza di user e pass nella tabella "utenti" verifichi anche che l'username inserito nel form login non sia presente nella tabella "lastlogin". Provvederai a svuotare tale tabella quando l'utente fa il logout. Spero di essermi spiegato bene
 

giannit

Nuovo Utente
30 Mar 2017
31
2
8
58
Esatto, pensavo proprio di creare una tabella oppure aggiungere una colonna alla tabella "members" in cui che se l'utente è online, quando un altro tenta la connessione con lo stesso username, venga reindirizzato alla pagina di login o una pagina con un messaggio tipo: Utente già connesso.
 

xone

Utente Attivo
4 Apr 2014
181
14
18
Salento
Conviene creare una tabella apposita e procedi in questo modo:
1) Prelevi username e password dal form login;
2) verifichi che user e pass siano corretti;
3) se sono corretti fai un controllo nella tabella es. "logged" o "loggati" o "members" come preferisci;
controlli con un if se l'user ricevuto dal form è presente nella tabella, se è presente reindirizzi a login.php se non è presente prosegui con l'area riservata.
4) quando l'utente fa logout, elimini questo utente dalla tabella "members" in modo che si possa nuovamente loggare
 
  • Like
Reactions: bubino8

giannit

Nuovo Utente
30 Mar 2017
31
2
8
58
Allora, aggiorno il post, ho trovato uno script di login che dovrebbe fare al caso mio, quando eseguo il login mi passa ad una pagina dove mi da come utente stato connesso tramite il timestamp. Se non cambio pagina, trascorso il tempo prestabilito mi riporta in stato disconnesso. Potrei sfruttare la funzione modificando leggermente, pensavo di mettere il tempo di connessione ad esempio 3 ore e se in questo frattempo non cambia lo stato, i tentativi di connessione con stesso user e password, dirottarli ad una pagina che avvisa che i dati sono gia in uso. Che dici, potrebbe funzionare?
 

xone

Utente Attivo
4 Apr 2014
181
14
18
Salento
Potrebbe funzionare, ma se in quel tempo un utente si connette da un altro dispositivo avresti comunque una sessione doppia...
 

bubino8

Utente Attivo
28 Apr 2017
360
20
28
31
BZ
Mi unisco alla discussione, che è utile anche a me.
Quindi nell'ipotetica tabella "logged" al login vado a fare i vari controlli e ad aggiungere con INSERT INTO la sessione con "nomeutente", mentre al logout vado a cancellare DELETE quella stessa riga? Corretto?

Potrebbero oltre alla colonna "nomesessione" tornare utili altri campi come "IP" o altro o sarebbero campi inutili?

Altro dubbio se dovessi avere la possibilità di accedere da due postazioni e mi dimenticassi di effettuare il logout, dovrei impostare che la sessione duri un massimo di (nr ore), o come si potrebbe fare?

Grazie
 
Ultima modifica:

xone

Utente Attivo
4 Apr 2014
181
14
18
Salento
Memorizzare l'ip serve a poco perchè se ti logghi da casa col wifi e col cellulare in 3g avresti 2 ip differenti, mentre il controllo deve avvenire sull'username che è univoco. Potresti in quel caso memorizzare un timestamp del login e dopo tot di tempo effettuare il logout forzato con la rimozione del nomesessione.
 

bubino8

Utente Attivo
28 Apr 2017
360
20
28
31
BZ
Grazie adesso faccio qualche altra prova, però mi è saltato fuori un altro dubbio al' logout io ho
HTML:
<a href="home.php?logout"><i class="fa fa-sign-out"></i><span> Esci</span></a>
come faccio eseguire la query DELETE al click su tag <a>?
 

xone

Utente Attivo
4 Apr 2014
181
14
18
Salento
la query la puoi aggiungere prima della funzione del logout, immagino che al logout eliminerai le sessioni, quindi appena prima di rimuovere le sessioni fai la query svuoti la tabella e procedi al logout.
 
  • Like
Reactions: bubino8

bubino8

Utente Attivo
28 Apr 2017
360
20
28
31
BZ
Hai pienamente ragione mio errore.
Fatto e sembra faccia il suo dovere.

Grazie ancora.
 

xone

Utente Attivo
4 Apr 2014
181
14
18
Salento
In quel caso allora oltre che registrare la sessione converrebbe usare un cookie e settare la sua scadenza:
setcookie("nomecookie","valorecookie",time()+temposcadenza);
O implementare un tempo di inattività e dopo un tot forzare il logout in automatico.
 
Discussioni simili
Autore Titolo Forum Risposte Data
max_400 Verificare se l'utente è on-line PHP 2
V Verificare pagina da cui arriva l'utente PHP 3
Y verificare condizione dopo esecuzione della funzione Programmazione 0
W verificare credenziali in automatico con PHP PHP 1
S Come verificare se un file è aperto PHP 2
I Verificare compressione GZip Server Dedicati e VPS 0
F [Javascript] Verificare la presenza di caratteri speciali in una password Javascript 3
otto9due Confrontare due array: verificare che tutti i valori di un'array siano contenuti in un'altra. jQuery 1
borgo italia una funzione per verificare l'invio di files Snippet PHP 0
C [PHP] verificare se un dispositivo e' online PHP 9
M [PHP] Verificare che azienda sia aperta o chiusa PHP 3
Monital Verificare il doqnolad di un file per una sola volta PHP 3
P inserire un titolo e verificare Ajax 4
Marco_88 Verificare la selezione degli elementi dom jQuery 2
filippino Verificare se variabile di PHP è definita PHP 2
Marco_88 Verificare più valori con operatore ternario PHP 4
JackIlPazzo Estrarre voce random e verificare se è corretta PHP 8
M Long polling per verificare gli utenti on line jQuery 1
Licantropo Come verificare i propri siti web, database e server? Sicurezza e Virus 6
M verificare se il valore inserito nel campo è un numero ed effettuare dei calcoli Javascript 2
asevenx verificare presenza parola lunga all'interno di un testo PHP 1
MarcoGrazia Verificare un checkbox/radiobutton con jquery Snippet Javascript 1
F Verificare se in una variabile è presente un determinato numero PHP 2
Z Verificare che mi sta scrivendo o rispondendo Javascript 1
L Funzione per verificare distanza di tempo non funziona: perchè? PHP 4
I Verificare il dispositivo del visitatore del sito? PHP 5
M Come verificare accesso ad area http auth basic? PHP 7
P Verificare e nel caso installar eeAccellerator Apache 1
D Verificare esistenza valore Javascript 2
IImanuII Verificare se i file sono scrivibili, apribili e chiudibili PHP 7
Shyson Verificare se una mail esiste PHP 15
IImanuII Verificare se Javascript è attivo attraverso PHP PHP 8
A Verificare variabile.... PHP 6
voldemort Verificare se un attributo esiste con jQuery jQuery 4
M Verificare se il dispositivo è TouchScreen Javascript 1
V Verificare il valore selezionato nella combobox PHP 5
S Tool in beta test per verificare le posizioni del tuo sito su Google.it Presenta il tuo Sito 0
B verificare esistenza link PHP 3
D Verificare esistenza indirizzo e-mail in php PHP 2
M Come verificare veridicità di un account di posta? Sicurezza e Virus 0
metalgemini verificare il blocco popup Javascript 0
metalgemini Verificare l'esistenza di un file su server Classic ASP 1
A Verificare il focus Javascript 4
I nome utente non esiste nel database PHP 1
I carica foto profilo sessione utente PHP 2
I sessione utente elimina chat PHP 12
I invia inserisci nome utente invia messaggio PHP 0
I cartella privata utente PHP 4
I caricamento file in sottocartella nome utente PHP 3
felino [Wordpress] Gallery con foto selezionabili dall'utente WordPress 0

Discussioni simili