Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    [php] : problema a mantenere la sessione

    ho un sistema di login così strutturato :

    ho tre tabelle nel mio database che mi servono a questo scopo :

    utente (nick,pass);
    utenti_online(utente,tempo);
    sessioni(id_sessione,nick,data);

    ed uno script php che ho all'entrata di ogni pagina:
    Codice PHP:
    require_once('SmartyConf.php');
    require_once (
    'db_use.php');

    session_start();
    printf("il tuo username è : %s "$_SESSION['username'] );
    if(!isset (
    $_SESSION['username'] ) )
    {
      if ( isset(
    $_COOKIE['id']) )
      { 
       
    $id $_COOKIE['id'];
        
    //trova la sessione nella tabella sessioni per vedere se il cookie e valdio
        
    $trovato findSession($id);
        if (
    $trovato)
        {
          
    //trova la sessione a cui è associato il nick
          
    $nick findNickSessione($id);
          
    //imposta il nick di sessione
          
    $_SESSION['username'] = $nick;
                    
          
    startOnline($nick);
          
    delOffline();
                    
                    
          
    //crea un nuovo id di sessione
          
    srand ((double)microtime()*1000000 );
          
    $session_id md5(uniqidrand () ) );
          
    session_id($session_id);
          
    $new session_id();
          
    printf(" nuova sessione : %s     "$new );
          
    printf(" vecchia sessione : %s   "$id );
          
    //setta il cookie con il nuovo id di sessione
          
    setcookie ('id' ,session_id() ,time()+350 );
          
    //sostituisce la nuova sessione con la vecchia nella tabella sessioni
          
    destroyOldSession($id);
          
    newSession($new,$nick);    
          
    printf(" Cookie buono, username : %s \n",$_SESSION['username'] );
        }
        else
        {
          
    //cancello il cookie
          
    setcookie('id',"",-3600);
          
    //setto il nick di sessione a ospite
          
    $_SESSION['username']="ospite";
          
    printf(" Cookie non buono, username : %s \n",$_SESSION['username'] );
        }
      }
      else 
      {
        
    $_SESSION['username']="ospite" ;
        
    printf(" Non hai cookie, username : %s \n",$_SESSION['username'] );
      }
    }
    if ( 
    $_SESSION['username'] =="ospite" )
    {
      require_once(
    'logCheck.php');

    e logCheck.php è :

    Codice PHP:
    if (isset($_POST['user']) && isset($_POST['pass'])) 

      
    $esito contlog($_POST['user'],$_POST['pass']);
        
      if (
    $esito
      {
        
    //setta il nick di sessione
        
    $_SESSION['username'] = $user;
          
        
    //crea un nuovo id di sessione
        
    srand ((double)microtime()*1000000 );
        
    $session_id md5(uniqidrand () ) );
        
    session_id($session_id);
                
        
    //inserisce l'utente tra gli online
        
    startOnline($user);
                
        
    //cancella gli offline
        
    delOffline();
                
        
    //setto il nuovo cookie
        
    setcookie ('id' ,session_id() ,time()+350 );
                
        
    //creo una nuova sessione  nella tabella sessione
        
    newSession(session_id(),$user );
                
        
    printf("hai fatto il login correttamente, nick : %s ",$_SESSION['username']);
                 
          
    $smarty->assign('ErrLog'"0" );
                
    $smarty-> assign('username',$_SESSION['username']);
      }  
      else 
      {
        
    $smarty-> assign('username',$_SESSION['username']);
        
    $smarty->assign('ErrLog'"1" );
      } 
    N.B.
    $smarty è un ogetto del template che uso non lo notate..tutte le stampe che faccio sono di controllo...

    ora arriviamo al mio problema...ogni volta che cambio o ricarico la pagina mi sparisce la sessione ed $_SESSION['username'] si setta a ospite...chi glie lo dice???


    help please

  2. #2
    bene ora vi spiego l'algoritmo:

    entro e mi controlla se ho la sessione già aperta con

    Codice PHP:

    if (isset($_SESSION['username']) )... 

    se non è aperta la prima cosa che fa è controllare se ho il cookie settato :

    Codice PHP:
    if (isset($_COOKIE['id'] ) 
    in cookie('id') c'è l'id dell'ultima sessione che l'utente ha aperto quando gli è stato spedito il cookie, quindi viene controllato nella tabella sessioni se esiste una sessione(creata precedentemente quando gli è stato spedito il cookie):
    Codice PHP:
     if ( isset($_COOKIE['id']) )
      { 
       
    $id $_COOKIE['id'];
        
    //trova la sessione nella tabella sessioni per vedere se il cookie e valdio
        
    $trovato findSession($id);
        if (
    $trovato)
        {
          .... 
    e in caso affermativo viene prima ricercato il nick associato alla sessione nella tabella sessioni:
    Codice PHP:
     //trova la sessione a cui è associato il nick
     
    $nick findNickSessione($id);
     
    //imposta il nick di sessione
     
    $_SESSION['username'] = $nick;
     ... 

    poi viene creato un numero casuale e poi riviene setta to l'id di sessione e risettato il cookie con il nuovo id di sessione:

    Codice PHP:
    crea un nuovo id di sessione
    srand 
    ((double)microtime()*1000000 );
    $session_id md5(uniqidrand () ) );
    session_id($session_id); 
    quindi viene cancellato il numero di sessione vecchio associato al nick nella tabella sessioni e sostituito con uno nuovo ed in più viene creato il nuovo cookie:
    Codice PHP:

       setcookie 
    ('id' ,session_id() ,time()+350 );
          
    //sostituisce la nuova sessione con la vecchia nella tabella sessioni
          
    destroyOldSession($id);
          
    newSession($new,$nick 
    e questo è il caso in cui non esiste $_SESSION['username'] ed hai il cookie...

    in caso non hai il cookie settato o è settato male viene messo l'username di sessione a ospite....

    Codice PHP:

      
    else 
      {
        
    $_SESSION['username']="ospite" 
    ora in questo caso si attiva il login :

    Codice PHP:
    if ( $_SESSION['username'] =="ospite" )
    {
      require_once(
    'logCheck.php');

    che fa più o meno le stesse operazioni del cookie solo che controlla prima se username e password sono esatti...

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 © 2024 vBulletin Solutions, Inc. All rights reserved.