[PHP] Limitare login ad un solo utente per volta

PietroDeRosa

Nuovo Utente
19 Mar 2018
20
0
1
34
Buongiorno a tutti,

ho due quesiti da porre, ma problemi diversi quindi aprirò due topic per non creare confusione.

Il primo cioè il seguente riguarda la necessità di dover gestire un login dove devo consentire l'accesso ad un solo utente per volta, nel senso che ho 3 user nel mio db e vorrei che per ognuno dei 3 user fosse consentita una sola e singola connessione.

Attualmente la mia pagina di login è questa

PHP:
<?php
@session_start();
$host = 'xxx';
$user = 'xxx';
$password = 'xxx';
$database = 'xxx';
$port = 3306;
$db = new mysqli($host, $user, $password, $database);
// Check connection
if ($db->connect_error) {
    die("Connection failed: " . $db->connect_error);
}
$known_user = 'PIPPO';
$known_pwd = 'PLUTO';
$utente = filter_input(INPUT_POST, 'user');
$paswrd = filter_input(INPUT_POST, 'pass');
$sql = "SELECT * FROM MOBILE WHERE UTENTE = '".$utente."' AND PASWRD = '".$paswrd."'";
$result = $db->query($sql);

if ($result->num_rows > 0) {
    $data = $result->fetch_assoc();
    $_SESSION['db_params'] = array(
        'user' => $data['UTENTE'],
        'host' => $data['IP'],
        'db_user' => $data['UTE'],
        'db_pwd' => $data['PWD'],
        'db_name' => $data['DB'],
    );
}
header('Location: index.php');
$db->close();
 

otto9due

Utente Attivo
22 Feb 2014
590
25
28
In questo caso creerei una tabella nel database es: "login" dove inserirei un solo campo con valore uno o zero. Nel caso di login effettuato il valore si sposta a uno in caso di Logout il valore si sposa a zero. In questo modo se si tenta una login puoi sapere che valore ha il campo login e quindi capire se qualcuno è loggato. Il problema a questo punto potresti averlo se qualcuno dimentica di sloggarsi..


Saluti G.G.
 

PietroDeRosa

Nuovo Utente
19 Mar 2018
20
0
1
34
In questo caso creerei una tabella nel database es: "login" dove inserirei un solo campo con valore uno o zero. Nel caso di login effettuato il valore si sposta a uno in caso di Logout il valore si sposa a zero. In questo modo se si tenta una login puoi sapere che valore ha il campo login e quindi capire se qualcuno è loggato. Il problema a questo punto potresti averlo se qualcuno dimentica di sloggarsi..


Saluti G.G.
Potrei però creare una disconnessione automatica dopo 30 minuti di inattività....

Il problema è un altro, non so fare né la prima (che mi hai consigliato) né la seconda :(
Qualche link di suggerimento? Un esempio pratico?
 

macus_adi

Utente Attivo
5 Dic 2017
1.343
91
48
IT/SW
Il problema a questo punto potresti averlo se qualcuno dimentica di sloggarsi
Potresti usare gli eventi di mysql, e nella tabellina che ti ha consigliato @otto9due aggiungerei il timestamp di quando l'utente si è loggato, successivamente crei l'evento e setti in automatico lo stato da 1 a 0 quando sono trascorsi x secondi!
 

otto9due

Utente Attivo
22 Feb 2014
590
25
28
Questa cosa degli eventi è la prima volta che la sento e sono molto incuriosito.. come funziona?? Ho letto che addirittura si puó impostare uno schedule o eliminarlo e modificarlo, una sorta fi cron job? Ancora non ho ben capito..


Saluti G.G.
 

PietroDeRosa

Nuovo Utente
19 Mar 2018
20
0
1
34
in realtà non essendo molto pratico a riguardo se foste così gentili da mostrarmi qualche esempio di codice, in modo da poter prendere spunto, ve ne sarei grato :)
 

macus_adi

Utente Attivo
5 Dic 2017
1.343
91
48
IT/SW
Si certo, metti in "ascolto" mysql per schedulare degli eventi, eseguire funzioni etc....

Esempio su quanto richiesto:
Tabella login
Codice:
--
-- Create table "login_"
--
CREATE TABLE login_ (
  id int(11) NOT NULL AUTO_INCREMENT,
  user_id int(11) DEFAULT NULL COMMENT 'id utente',
  f_login bigint(20) DEFAULT NULL COMMENT 'Primo login',
  last_login bigint(20) DEFAULT NULL COMMENT 'Ultimo login effettuato',
  max_time int(11) DEFAULT 1800 COMMENT 'In secondi, quindi sono 30 minuti',
  status_ tinyint(1) DEFAULT 0,
  PRIMARY KEY (id)
)
ENGINE = INNODB
AUTO_INCREMENT = 2
CHARACTER SET utf8
COLLATE utf8_general_ci
ROW_FORMAT = DYNAMIC;
Evento disabilita utente:
Codice:
-- Create event "disabilita_sessione"
--
CREATE
    DEFINER = '_r!***'@'localhost'
EVENT disabilita_sessione
    ON SCHEDULE EVERY '15' MINUTE
    STARTS CURRENT_TIMESTAMP
    DO
BEGIN

 UPDATE login_
SET status_ = 0
WHERE max_time + last_login < UNIX_TIMESTAMP(NOW())

END
 

PietroDeRosa

Nuovo Utente
19 Mar 2018
20
0
1
34
Mi da errore quando provo a creare l'evento

Codice:
-- Create event "disabilita_sessione"
--
CREATE
    DEFINER = '_r!***'@'localhost'
EVENT disabilita_sessione
    ON SCHEDULE EVERY '15' MINUTE
    STARTS CURRENT_TIMESTAMP
    DO
BEGIN

 UPDATE login_
SET status_ = 0
WHERE max_time + last_login < UNIX_TIMESTAMP(NOW())

END
[/QUOTE]

/* Errore SQL (1064): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'END' at line 14 */

se tolgo l' END

/* Errore SQL (1064): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 13 */
 

PietroDeRosa

Nuovo Utente
19 Mar 2018
20
0
1
34
L'errore non me lo da su user (che in quel caso sarebbe dovuto essere The user specified as a definer ('_r!***'@'localhost') does not exist), ma sull' END finale.

Ho sostituito gli asterischi con l'utente db ma continua a darmi lo stesso errore
 

PietroDeRosa

Nuovo Utente
19 Mar 2018
20
0
1
34
Penso sia questo il modo corretto

Codice:
CREATE
    DEFINER = `mobileuser`@`%` 
EVENT disabilita_sessione
    ON SCHEDULE EVERY '15' MINUTE
    STARTS CURRENT_TIMESTAMP
    DO
 UPDATE login_
SET status_ = 0
WHERE max_time + last_login < UNIX_TIMESTAMP(NOW());
 

macus_adi

Utente Attivo
5 Dic 2017
1.343
91
48
IT/SW
Codice:
SET NAMES 'utf8';
--
-- Set default database
--
USE test;
DELIMITER $$
--
-- Create event "disabilita_sessione"
--
CREATE 
    DEFINER = '!_****-#!'@'localhost'
EVENT disabilita_sessione
    ON SCHEDULE EVERY '15' MINUTE
    STARTS CURRENT_TIMESTAMP
    DO 
BEGIN
 UPDATE login_
SET status_ = 0
WHERE max_time + last_login < UNIX_TIMESTAMP(NOW())
END
$$
ALTER EVENT disabilita_sessione
    ENABLE
$$
DELIMITER ;
Così!
 
Discussioni simili
Autore Titolo Forum Risposte Data
F Applicazione PHP/MySQL per prenotazioni: limitare il numero massimo di posti prenotabili PHP 20
A Limitare accesso ad alcune pagine web PHP PHP 2
A [PHP] limitare counter paginazione PHP 7
F Cerco Hosting con VECCHIE versioni di php Hosting 0
Cosina Captcha php PHP 1
S passare un valore da un form a un file .php con metodo post PHP 4
N php msyql PHP 6
N php problemi a visualizzare video PHP 3
A menu a tendina php PHP 1
D protezione cartelle: blocco visualizzazione/scaricamento contenuto, ma abilitazione utilizzo dati da parte di file .php presenti sul sito Web Server 1
F Php date_diff PHP 1
K [PHP] Aggiungere caratteri ad una stringa in base alla lunghezza della stessa PHP 2
C Wp-admin a file php WordPress 5
Lino80 [Retribuito] Cerco programmatore php per modifica/inserimento funzione/valori da un plugin importer wordpress Offerte e Richieste di Lavoro e/o Collaborazione 0
csi Inviare file jpg in locale alla stampante con php PHP 0
M Passaggio variabili array php su un tasto jq PHP 3
E Php aggiornamento tabella PHP 9
G phpmailer e php 8.1 con estensione mysqli PHP 6
M Invio dati database via email php PHP 0
K [php] Problema con inner join PHP 4
K [php]form invio dati PHP 0
P Codifica caratteri speciali mysql php PHP 0
K [PHP] Problema con variabili concatenate. PHP 1
E Stampante termica escpos-php PHP 6
JeiMax Modifica codice php personalizzato PHP 2
G Come modificare un pdf in php PHP 1
U Link a doppio file PHP PHP 0
E PHP & jQuery PHP 8
N Passare array da php a javascript PHP 5
L tipo boolean non funzionante su mariadb (mysql). E codice php 7.4. PHP 0
U PHP creare un file excel dopo ricerca nel DB PHP 0
M PHP/MySQL - Estrarre valori min e max di ogni gruppo PHP 5
F Php e fatturazione elettronica PHP 0
P lanciare script asp (o php) da jquery Javascript 1
Couting95 inserire dati da un file di testo in una tabella in php PHP 1
P Data scraping in PHP non funziona PHP 4
C Calcoli matematici in php PHP 5
F Scrivere dei dati in word con php PHP 0
D PHP leggere cartella di Windows PHP 1
I dominio aruba versione php server linux Domini 3
G Colorare menu select attraverso ricerca php PHP 0
L PHP motore di ricerca nel sito PHP 1
S PHP e Mysqli PHP 0
Y Stampare da php su un foglio A6 attraverso una stampante esterna PHP 1
M Visulizzare immagine con php PHP 8
G [PHP] Creare script di prenotazione con controllo disponibilità. PHP 7
G leggere file txt e stampare con php il contenuto a video PHP 7
F Ricreare struttura php+mysql su Xampp Apache 0
Z PHP.INI - STMP per invio email con PHP Server Dedicati e VPS 0
M Array associativi php su 2 campi mysql PHP 10

Discussioni simili