[PHP] Limitare login ad un solo utente per volta

Discussione in 'PHP' iniziata da PietroDeRosa, 10 Aprile 2018.

  1. PietroDeRosa

    PietroDeRosa Nuovo Utente

    Registrato:
    19 Marzo 2018
    Messaggi:
    20
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    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();
     
  2. otto9due

    otto9due Utente Attivo

    Registrato:
    22 Febbraio 2014
    Messaggi:
    529
    Mi Piace Ricevuti:
    21
    Punteggio:
    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.
     
  3. PietroDeRosa

    PietroDeRosa Nuovo Utente

    Registrato:
    19 Marzo 2018
    Messaggi:
    20
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    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?
     
  4. PietroDeRosa

    PietroDeRosa Nuovo Utente

    Registrato:
    19 Marzo 2018
    Messaggi:
    20
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    Buongiorno,
    nessuno può aiutarmi?
     
  5. macus_adi

    macus_adi Utente Attivo

    Registrato:
    5 Dicembre 2017
    Messaggi:
    1.008
    Mi Piace Ricevuti:
    57
    Punteggio:
    48
    Sesso:
    Maschio
    Occupazione:
    Dev Full Stack
    Località:
    IT/SW
    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!
     
  6. otto9due

    otto9due Utente Attivo

    Registrato:
    22 Febbraio 2014
    Messaggi:
    529
    Mi Piace Ricevuti:
    21
    Punteggio:
    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.
     
  7. PietroDeRosa

    PietroDeRosa Nuovo Utente

    Registrato:
    19 Marzo 2018
    Messaggi:
    20
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    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 :)
     
  8. macus_adi

    macus_adi Utente Attivo

    Registrato:
    5 Dicembre 2017
    Messaggi:
    1.008
    Mi Piace Ricevuti:
    57
    Punteggio:
    48
    Sesso:
    Maschio
    Occupazione:
    Dev Full Stack
    Località:
    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
     
  9. PietroDeRosa

    PietroDeRosa Nuovo Utente

    Registrato:
    19 Marzo 2018
    Messaggi:
    20
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    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 */
     
  10. macus_adi

    macus_adi Utente Attivo

    Registrato:
    5 Dicembre 2017
    Messaggi:
    1.008
    Mi Piace Ricevuti:
    57
    Punteggio:
    48
    Sesso:
    Maschio
    Occupazione:
    Dev Full Stack
    Località:
    IT/SW
    Devi inserire l'utente corrente con il quale stai effettuando l'operazione.... Gli asterischi servivano a far capire che la stringa doveva essere rimpiazzata!
     
  11. PietroDeRosa

    PietroDeRosa Nuovo Utente

    Registrato:
    19 Marzo 2018
    Messaggi:
    20
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    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
     
  12. PietroDeRosa

    PietroDeRosa Nuovo Utente

    Registrato:
    19 Marzo 2018
    Messaggi:
    20
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    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());
    
     
  13. macus_adi

    macus_adi Utente Attivo

    Registrato:
    5 Dicembre 2017
    Messaggi:
    1.008
    Mi Piace Ricevuti:
    57
    Punteggio:
    48
    Sesso:
    Maschio
    Occupazione:
    Dev Full Stack
    Località:
    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ì!
     
Sto caricando...

Condividi questa Pagina