Visualizzazione dei risultati da 1 a 6 su 6

Discussione: utenti online sul sito

  1. #1
    Utente di HTML.it
    Registrato dal
    May 2001
    Messaggi
    309

    utenti online sul sito

    buona serata a tutti!

    posto per un piccolo problema: desidero elencare tutti gli utenti connessi al sito, per far ciò, una volta eseguito il login inserisco in un campo che chiamerò ultima_v la data in cui 'utente effetua il login. Il campo ultima_v è in formato timestamp....è corretto questo??? Perchè una volta effettuato il login, non mi inserisce la data nell'apposito campo. Ora non riesco a capire dove sto sbagliando...vi posto il codice che elabora il loggin:

    Codice PHP:
    <?php
        
    //Start session
        
    session_start();


            
    $date = new DateTime();
            
    $date->getTimestamp();

        
        
    //Include database connection details
        
    require_once('inc/config.php');
     
        
        
    //Array to store validation errors
        
    $errmsg_arr = array();
        
        
    //Validation error flag
        
    $errflag false;
        
        
    //Connect to mysql server
        
    $link mysql_connect(DB_HOSTDB_USERDB_PASSWORD);
        if(!
    $link) {
            die(
    'Failed to connect to server: ' mysql_error());
        }
        
        
    //Select database
        
    $db mysql_select_db(DB_DATABASE);
        if(!
    $db) {
            die(
    "Unable to select database");
        }
        
        
    //Function to sanitize values received from the form. Prevents SQL injection
        
    function clean($str) {
            
    $str = @trim($str);
            if(
    get_magic_quotes_gpc()) {
                
    $str stripslashes($str);
            }
            return 
    mysql_real_escape_string($str);
        }
        
        
    //Sanitize the POST values
        
    $login clean($_POST['login']);
        
    $password clean($_POST['password']);
        
        
    //Input Validations



        
    if($login == '') {
            
    $errmsg_arr'1';
            
    $errflag true;
        }

        if(
    $password == '') {
            
    $errmsg_arr'2';
            
    $errflag true;
        }

        if(
    $password == '' and $login == '') {
            
    $errmsg_arr'3';
            
    $errflag true;
        }


        
    //If there are input validations, redirect back to the login form
        
    if($errflag) {
            
    $_SESSION['ERRMSG_ARR'] = $errmsg_arr;
            
    session_write_close();
            
    header("location: index.php?ref=login.error&ex=$errmsg_arr");
            exit();
        }
        

        
        
    //Create query
        
    $qry="SELECT * FROM members WHERE login='$login' AND passwd='$password'";
        
    $result=mysql_query($qry);
        
    //Check whether the query was successful or not
        
    if($result) {
            if(
    mysql_num_rows($result) == 1) {
                
    //Login Successful



                 
    mysql_query("INSERT INTO members (ultima_v) values ('$date')");





                
    session_regenerate_id();
                
    $member mysql_fetch_assoc($result);
                
    $_SESSION['SESS_MEMBER_ID'] = $member['member_id'];
                
    $_SESSION['SESS_FIRST_NAME'] = $member['firstname'];
                
    $_SESSION['SESS_LAST_NAME'] = $member['lastname'];
                
    session_write_close();
                
    header("location: index.php");
                exit();
            }else {
                
    //Login failed
                
    header("location: index.php?ref=login.failed");
                exit();
            }
        }else {
            die(
    "Query failed");
        }
    ?>
    spero di essermi spiegata bene!
    grazie in anticipo a tutti! Gina

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2001
    Messaggi
    309

    up

    scusate se insisto...proprio non riesco a venirne a capo con questa cosa. Nn ci crederete ma son da ieri notte che ci lavoro....tra questo script e varie ricerche su google...htm.it ecc. Vi spiego il problema: una volta effettuato il login, mi servirebbe inserire nel campo SESSIONE e nel campo TIMESTAMP le relative variabili, in modo poi tramite query scoprire chi c'è online e chi meno...potete darmi una mano?? Ve ne sarei infinitamente grata!!!
    vi posto nuovamente il codice PULITO (dopo aver fatto un miliardo di prove) della pagina che processa il login...secondo me è da qua che dovrei inserire questi dati nei sopracitati campi. Se mi sbaglio corregettemi pure! il codice è:

    Codice PHP:
    <?php
        
    //Start session
        
    session_start();
        
        
    //Include database connection details
        
    require_once('config.php');
        
        
    //Array to store validation errors
        
    $errmsg_arr = array();
        
        
    //Validation error flag
        
    $errflag false;
        
        
    //Connect to mysql server
        
    $link mysql_connect(DB_HOSTDB_USERDB_PASSWORD);
        if(!
    $link) {
            die(
    'Failed to connect to server: ' mysql_error());
        }
        
        
    //Select database
        
    $db mysql_select_db(DB_DATABASE);
        if(!
    $db) {
            die(
    "Unable to select database");
        }
        
        
    //Function to sanitize values received from the form. Prevents SQL injection
        
    function clean($str) {
            
    $str = @trim($str);
            if(
    get_magic_quotes_gpc()) {
                
    $str stripslashes($str);
            }
            return 
    mysql_real_escape_string($str);
        }
        
        
    //Sanitize the POST values
        
    $login clean($_POST['login']);
        
    $password clean($_POST['password']);
        
        
    //Input Validations
        
    if($login == '') {
            
    $errmsg_arr[] = 'Login ID missing';
            
    $errflag true;
        }
        if(
    $password == '') {
            
    $errmsg_arr[] = 'Password missing';
            
    $errflag true;
        }
        
        
    //If there are input validations, redirect back to the login form
        
    if($errflag) {
            
    $_SESSION['ERRMSG_ARR'] = $errmsg_arr;
            
    session_write_close();
            
    header("location: index.php");
            exit();
        }
        
        
    //Create query
        
    $qry="SELECT * FROM members WHERE login='$login' AND passwd='".md5($_POST['password'])."'";
        
    $result=mysql_query($qry);
        
        
    //Check whether the query was successful or not
        
    if($result) {
            if(
    mysql_num_rows($result) == 1) {


                


                
    //Login Successful
                
    session_regenerate_id();
                
    $member mysql_fetch_assoc($result);
                
    $_SESSION['SESS_MEMBER_ID'] = $member['member_id'];
                
    $_SESSION['SESS_FIRST_NAME'] = $member['firstname'];
                
    $_SESSION['SESS_LAST_NAME'] = $member['lastname'];
                
    $_SESSION['SESS_LOGIN'] = $member['login'];
                
    $_SESSION['SESS_PSWD'] = $member['passwd'];
                
    session_write_close();
                
    header("location: index.php");
                exit();
            }else {
                
    //Login failed
                
    header("location: index.php");
                exit();
            }
        }else {
            die(
    "Query failed");
        }
    ?>

  3. #3
    Una delle infinite soluzioni consiste nell'utilizzare una tabella (registry) all'interno della quale, fra le varie informazioni, tenere anche un campo (logged_users) sottoforma di CSV di ID relativi agli utenti che hanno effettuato il login. Al logout togli l'ID dalla lista. Fine.

    Se pensi di avere milioni di utenti allora usa una tabella logged_users con solo il campo UID, che contiene l'ID del record nella tabella utenti relativa all'utente loggato. Le CSV lunghe milioni di caratteri non sono consigliabili mi sa'. Questa considerazione puo' non valere qualora decidessi di utilizzare il motore CSV di MySQL o del database che utilizzi, se lo supporta.

    In bocca al lupo e facci sapere!

    Saluti,
    Claudio M. Alessi

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2001
    Messaggi
    309
    niente da fare...non ne vengo a capo. Potresti postarmi un esempio su come fare per inserire nel database il timestamp e la sessione una volta effettuato il login per favore? te ne sarei infinitamente grata!

  5. #5
    Difficilmente mi vedrai postare del codice, quello che posso fare e' cercare di indirizzarti in modo appropriato.

    Innanzi tutto nel codice aggiornato che hai postato manca la query SQL per cambiare il valore del campo ultima_v. Secondo poi questa query va' inserita DOPO la mysql_fetch_assoc() che usi per ottenere i dati dell'utente. Se cambi ultima_v prima, la mysql_fetch_assoc() non torna piu' i dati dell'utente ma un semplice "true" dovuto all'update che segue:

    Codice PHP:
       mysql_query("update members set ultima_v = CURRENT_TIMESTAMP where id = ".$member['member_id']); 
    Nella tua prima versione del codice usavi una INSERT per inserire un nuovo utente col cambio ultima_v impostato su $date. Ma per l'appunto inserivi un nuovo utente, non modificavi l'utente effettivamente loggato.

    Inoltre perche' rigeneri l'ID di sessione? Non vedo motivi evidenti leggendo il tuo codice.

    Evita di scrivere freneticamente, rifletti su quello che fai e leggi attentamente la documentazione ufficiale.

    In bocca al lupo,
    Claudio M. Alessi

  6. #6
    Utente di HTML.it
    Registrato dal
    May 2001
    Messaggi
    309

    credo di aver trovato una soluzione.....

    praticamente ho risolto in questo modo:

    effettuo il login.
    1) salvo nei campi: SESSIONE, LAST, ULTIMO_ACCESSO, ONLINE

    le variabili: $session_id, $last (timestamp), $ultimo_accesso (data in formato aaaa-mm-dd hh:mm:ss) e nel campo online: ON

    dopodichè.....


    in ogni pagina includo un file che controlla quanti utenti ci sono online ATTIVI, quanti "dormono" e dopo una inattività di 5 ore distruggo sessione, svuoto i campi sopra al pass 1) e header_location: logout.php?exec=session.expired

    dove mi recupero la exec con un GET e imposto un messaggio che dice per l'appunto:
    sei stato disconnesso perchè sei rimasto troppo tempo inattivo ecc...bla bla bla.


    non trovo altre soluzioni uff......


    voi cosa ne pensate?



    p.s. funziona tutto

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.