Pagina 1 di 2 12 UltimoUltimo
Visualizzazione risultati 1 fino 30 di 31

Discussione: Controllo sessione

  1. #1
    L'avatar di fantacalciojarno
    fantacalciojarno non  connesso Utente giovane
    Data registrazione
    31-12-2010
    Messaggi
    89

    Predefinito Controllo sessione

    ciao,
    Spiego subito il problema, ho una pagina di login che apre una sessione, se i dati sono esatti viene richiamata una determinata pagina utente che ho in DB. Ora,io volevo fare in modo che ogni utente acquisisse i permessi per vedere solo la sua pagina personale e non quella di tutti. Spero di essermi spiegato.In pratica:
    Login php:
    Codice PHP:
    <?php  

        session_start
    ();  

        function 
    loginform(){  
          
            echo 
    "<form action='' method='POST'>  
            Username: <input type='text' name='username'>  
            Password: <input type='text' name='password'>  
            <input type='submit' name='login' value='Login'>  
            </form>  
              
            "
    ;  
        }  
          
        function 
    logoutform(){  
          
            echo 
    "<form action='' method='POST'>  
              
            <input type='submit' name='Invia' value='Logout'>  
            </form>  
              
            "
    ;  
        }  
          
         
        function 
    login($username$password){   
        
    $pass md5($password);   
        
    $con mysql_connect('localhost''root''****') or die (mysql_error());   
        
    mysql_select_db('my_db'$con) or die (mysql_error());   
        
    $result mysql_query(" SELECT * FROM user WHERE username='$username' AND password='$pass' ") or die (mysql_error);   
        
    $result_array mysql_fetch_array($result);  
        
    $count mysql_num_rows($result);   
           
        if(
    $count==1){   
        
    $_SESSION['login']=$username;  
        
    $_SESSION['pagina']= $result_array['pagina'];
        echo 
    "Login avvenuto";   
        echo
    "<script type='text/javascript'>";  
        echo 
    "setTimeout(\"location.href='{$result_array['pagina']}';\", 1000);";    
        echo
    "</script>";  
        }   
        else{   
        echo 
    "Login errato. ";   
        }   
        }   
          
        function 
    logout(){  
        
    session_destroy();  
        }  

        if(isset(
    $_POST['login'])){  
            echo 
    "sei loggato.";  
                
    logoutform();  
        }  
        else{  
        echo 
    "fai il login" ;       
                
    loginform();  
        }  
          
        if(
    $_POST['login']){  
        echo 
    "login in corso..";  
          
                
    login($_POST['username'], $_POST['password']);  
        }      
        elseif(
    $_POST['logout']){  
        echo 
    "Stai facendo il logout ";  
                
    logout();  
        }  
              
    ?>
    Questo il controllo:
    Codice PHP:
    <?php  

    session_start
    ();  

    if (!isset(
    $_SESSION['login']) && !isset($_SESSION['pagina'])){ 
     exit( 
    "Accesso negato. Devi fare il <a href='login.php'>login<a>.");  
    }   

    ?>
    Funziona ma solo in parte. La sessione si apre ma con i permessi di un utente posso vedere le pagine anche degli altri.. non mi spiego il perch.
    Consigli,indicazioni o altro?Vi ringrazio.

  2. #2
    L'avatar di saitfainder
    saitfainder non  connesso Snir Stff
    Data registrazione
    06-12-2002
    Residenza
    Torino
    Messaggi
    8,715

    Predefinito

    Perch nel controllo non vai a vedere cosa c' in $_SESSION['pagina'] ?


    una mia peculiarit distorcere la verit e inventarne di nuove.
    I tuoi orientamenti hanno su di me un effetto prossimo allo zero.


  3. #3
    L'avatar di fantacalciojarno
    fantacalciojarno non  connesso Utente giovane
    Data registrazione
    31-12-2010
    Messaggi
    89

    Predefinito

    E tu come farsti?
    Scusa ma sono le prime cose che faccio con le sessioni..e grazie

  4. #4
    L'avatar di saitfainder
    saitfainder non  connesso Snir Stff
    Data registrazione
    06-12-2002
    Residenza
    Torino
    Messaggi
    8,715

    Predefinito

    Non una questione di sessione, che se metti un qualcosa in una variabile e poi guardi solo se la variabile esiste ovvio che non pu funzionare!


    una mia peculiarit distorcere la verit e inventarne di nuove.
    I tuoi orientamenti hanno su di me un effetto prossimo allo zero.


  5. #5
    L'avatar di fantacalciojarno
    fantacalciojarno non  connesso Utente giovane
    Data registrazione
    31-12-2010
    Messaggi
    89

    Predefinito

    Guardavo solo se esiste perch la pagina la visualizzo quando creo la sessione nel primo script.
    L'errore li? O nel controllo devo fare in modo che la pagina che sto visualizzando sia la stessa dell'array?
    Ultima modifica di fantacalciojarno : 12-11-2012 alle ore 17.25.52

  6. #6
    L'avatar di alemoppo
    alemoppo non  connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    18,407

    Predefinito

    Ma come fa l'utente "x" a raggiungere la sua pagina? Le pagine sono "fisiche" oppure (spero) hanno contenuto caricato dal database?

    In ogni caso, usa la mysql_real_escape_string() per evitare sql injection all'username passato dal form.

    Ciao!

  7. #7
    L'avatar di fantacalciojarno
    fantacalciojarno non  connesso Utente giovane
    Data registrazione
    31-12-2010
    Messaggi
    89

    Predefinito

    La mysql_real_escape_string() la mettero' ora m'interessava che funzionasse. Non ho capito bene cosa intendi per ''fisiche'' ma la pagina viene caricata da database.
    Resta sempre il problema dei permessi...

  8. #8
    L'avatar di alemoppo
    alemoppo non  connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    18,407

    Predefinito

    Se la pagina caricata dal db, allora puoi fare la pagina privata.php in questo modo:

    Codice PHP:
    <?php
    if(!isset($_SESSION['username']))
    die(
    'prima devi loggarti');

    //prelevi i dati dal db, con una query del tipo SELECT * FROM pagine WHERE username=$_SESSION['username']

    ?>
    Non capisco il significato di $_SESSION['pagina'].
    Ciao!
    Ultima modifica di alemoppo : 16-11-2012 alle ore 01.57.35

  9. #9
    L'avatar di fantacalciojarno
    fantacalciojarno non  connesso Utente giovane
    Data registrazione
    31-12-2010
    Messaggi
    89

    Predefinito

    $_SESSION['pagina'] doveva servire a creare una sessione pagina da confrontare nella verifica della sessione. Forse pero' non ci siamo capiti, il nome della pagina che richiamo nel database non la pagina fisica.
    Ora dopo aver immesso user e psw la sessione parte ma con gli stessi permessi l'utente 1 conoscendo il nome della pagina dell'utente 2 vi puo' accedere.
    Ecco io non voglio che questo accada!
    Credo il login apparte la sessione pagina inutile vada bene, il controllo che non so come gestire.

  10. #10
    L'avatar di alemoppo
    alemoppo non  connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    18,407

    Predefinito

    Citazione Originalmente inviato da fantacalciojarno Visualizza messaggio
    $_SESSION['pagina'] doveva servire a creare una sessione pagina da confrontare nella verifica della sessione.
    Cosa la vecchia sessione? Non capisco...

    Citazione Originalmente inviato da fantacalciojarno Visualizza messaggio
    il nome della pagina che richiamo nel database non la pagina fisica.
    Ss, questo lo hai detto. Appunto ti ho dato la soluzione, sopra (prendendo la pagina da db).



    ...Ancora son dell'idea che la soluzione che ti ho dato sopra fa il caso tuo

    Ciao!

  11. #11
    L'avatar di fantacalciojarno
    fantacalciojarno non  connesso Utente giovane
    Data registrazione
    31-12-2010
    Messaggi
    89

    Predefinito

    Scusa ma puoi postare tutto il codice?A me gia solo l'isset con $_session['username'] come hai messo tu mi da problemi

  12. #12
    L'avatar di alemoppo
    alemoppo non  connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    18,407

    Predefinito

    Ovviamente prima va aperta la sessione, con session_start(). I sorgenti che scrivo dovrebbero aver lo scopo soltanto di far capire la logica.

    Come determini la pagina dell'utente di "a" rispetto quella di "b"? Non meglio fare un'unica pagina, per poi l dentro inserire (tramite $_SESSION['username']) i dati prelevati dal db per l'utente "a"? (se si tratta di "b" invece che "a" lo determini tramite $_SESSION['username']).

    Oppure, dimmi la logica di come avevi pensato di fare tutto questo...

    Ciao!

  13. #13
    L'avatar di fantacalciojarno
    fantacalciojarno non  connesso Utente giovane
    Data registrazione
    31-12-2010
    Messaggi
    89

    Predefinito

    La logica era che nel file login.php dopo aver controllato user e psw recuperavo la pagina da $result_array = mysql_fetch_array($result); e funzionava tutto ok, ogni utente andava nella sua paginetta solo era loggato.
    All'inizio della paginetta utente c era il controllo ed era quello che a me mi fregava.
    Sicuramente non era il meglio del meglio ma fino al controllo per me era sufficiente.
    Non so se ti torna..

  14. #14
    L'avatar di alemoppo
    alemoppo non  connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    18,407

    Predefinito

    Non mi torna quando "recuperi la pagina". Se la pagina salvata sul database, cosa recuperi?

    Non fai prima a mostrare direttamente il contenuto che prelevi dal database, invece di farlo andare nella propria pagina (che dovrebbe contenere scritte salvate sul database, se non erro).

    Ciao!

  15. #15
    L'avatar di fantacalciojarno
    fantacalciojarno non  connesso Utente giovane
    Data registrazione
    31-12-2010
    Messaggi
    89

    Predefinito

    No,erri
    nel database c la tabella user che ha i campi 'username' e 'psw' e un'altro campo 'pagina' che contiene solo il nome della pagina-utente che richiamo con fetch_array.
    La pagina vera e proprio contiene di tutto ma nei file.

  16. #16
    L'avatar di alemoppo
    alemoppo non  connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    18,407

    Predefinito

    E allora una pagina "fisica", e non viene caricata dal database (intendo, il contenuto!).
    Quindi, per ogni utente, crei un file nel tuo spazio? !

    Ciao!

  17. #17
    L'avatar di fantacalciojarno
    fantacalciojarno non  connesso Utente giovane
    Data registrazione
    31-12-2010
    Messaggi
    89

    Predefinito

    Si ma il numero degli utenti 'privati' fisso e molto basso e la pagina ha poche cose che cambiano l'una rispetto a un'altra. E' un problema per controllare la sessione?

  18. #18
    L'avatar di alemoppo
    alemoppo non  connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    18,407

    Predefinito

    Beh, teoricamente no: sufficiente controllare se la pagina corrente coincide con la $_SESSION['pagina'], magari utilizzando pathinfo()...

    Ma non era pi semplice chiamare la pagina del tipo: "nomeutente.php"?

    Ciao!

  19. #19
    L'avatar di fantacalciojarno
    fantacalciojarno non  connesso Utente giovane
    Data registrazione
    31-12-2010
    Messaggi
    89

    Predefinito

    In realta' la pagina si chiama nomeutente.php lo trovavo piu' semplice anch io!
    Il mio problema era solo controllare che i permessi fossero 'personali'.

  20. #20
    L'avatar di alemoppo
    alemoppo non  connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    18,407

    Predefinito



    La pagina la stessa per tutti (del tipo nomeutente.php) oppure ogni utente ha la sua? (giorgio.php, luigi.php, antonio.php)??

    Non so: sar stupido io, ma son passati 20 messaggi e ancora non ho capito questa cosa fondamentale

    Ciao!

  21. #21
    L'avatar di fantacalciojarno
    fantacalciojarno non  connesso Utente giovane
    Data registrazione
    31-12-2010
    Messaggi
    89

    Predefinito

    :) Ogni utente ha la sua. Pathinfo() lo conosco ora ho fatto una prova ma nn funziona:

    Codice PHP:
    <?php 
    $file 
    pathinfo('paginacorrente.php');
    session_start(); 
    if (!isset(
    $_SESSION['login'])){
    if (
    $_SESSION['pagina'] != " .$file "){
    exit( 
    "Accesso negato. Devi fare il <a href='login.php'>login<a>."); 
    }  
    }
    ?>
    Non funziona ma nn da errori....

  22. #22
    L'avatar di alemoppo
    alemoppo non  connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    18,407

    Predefinito

    Vedi bene che pathinfo ritorna un array; passargli la pagina che gi vorresti, non ha molto senso. Inoltre, se ogni utente ha la sua pagina, cosa "paginacorrente.php"?? .

    In ogni caso, io intendevo una cosa del tipo:

    Codice PHP:
    $path pathinfo(__FILE__);
    echo 
    $path['basename']; 
    (ovviamente l'echo solo per vedere cosa scrive).

    Se non ti funziona, debugga un minimo, ad esempio con echo, e vedi cosa non va!

    Ciao!

  23. #23
    L'avatar di fantacalciojarno
    fantacalciojarno non  connesso Utente giovane
    Data registrazione
    31-12-2010
    Messaggi
    89

    Predefinito

    Pagina corrente sarebbe la pagina dove metto il controllo, credevo andava messo li anche il pathinfo ma come la metto la metto a me non mi funziona!
    Nel pathinfo() ci va il result_array'pagina'?Un'altro po di pazienza ormai fuori di testa tra poco mollo.

  24. #24
    L'avatar di alemoppo
    alemoppo non  connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    18,407

    Predefinito

    Nel pathinfo ci va quello che ho messo io. Poi controlli se $path['basename'] == $_SESSION['pagina'].

    Ciao!

  25. #25
    L'avatar di fantacalciojarno
    fantacalciojarno non  connesso Utente giovane
    Data registrazione
    31-12-2010
    Messaggi
    89

    Predefinito

    Vediamo se ci leviamo le gambe, il controllo da inserire incima alla pagina personale diventato cosi... ma la stessa cosa...
    Codice PHP:
    <?php 
    $path 
    pathinfo(__file__);
    session_start(); 
    if (!isset(
    $_SESSION['login'])){
    if (
    $_SESSION['pagina'] != $path['basename']){
    exit( 
    "Accesso negato. Devi fare il <a href='login.php'>login<a>."); 
    }  
    }
    ?>

  26. #26
    L'avatar di alemoppo
    alemoppo non  connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    18,407

    Predefinito

    Cosa significa la stessa cosa? Stampa le variabili e vedi perch non va. Fai debug!

    Ciao!

  27. #27
    L'avatar di fantacalciojarno
    fantacalciojarno non  connesso Utente giovane
    Data registrazione
    31-12-2010
    Messaggi
    89

    Predefinito

    Che ti devo dire?Hai ragione, ma le variabili di sessione o mi da NULL o non mi da niente..avevo provato a debuggare con var_dump,echo e print

  28. #28
    L'avatar di alemoppo
    alemoppo non  connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    18,407

    Predefinito

    Se le variabili di sessione non hanno valori giusti, significa che non le hai assegnate correttamente.

    Se NULL, probabilmente anche nel database c' il valore "NULL".

    Ciao!

  29. #29
    L'avatar di fantacalciojarno
    fantacalciojarno non  connesso Utente giovane
    Data registrazione
    31-12-2010
    Messaggi
    89

    Predefinito

    Oggi ci sto un po di piu'con la testa; No, le variabili vanno bene, c'erano x me un po di difficolta', inanzi tutto mi dovevo loggare e poi dovevo cancellare cache e/o cookie altrimenti usciva un casino. L'unica cosa che se uso questo script:
    Codice PHP:
    <?php 
    $path 
    pathinfo(__file__);
    session_start(); 

    if (
    $_SESSION['pagina'] != $path['basename']){
    exit( 
    "Accesso negato. Devi fare il <a href='login.php'>login<a>."); 
    }    
    ?>
    Tutto funziona perfettamente, se aggiungo " if (!isset($_SESSION['login'])) " mi loggo ma posso vedere cmq le pagine di cui non ho i permessi. Le graffe le metto.Per chiarezza:


    Codice PHP:
    <?php 
    $path 
    pathinfo(__file__);
    session_start(); 
    if (!isset(
    $_SESSION['login'])){
    if (
    $_SESSION['pagina'] != $path['basename']){
    exit( 
    "Accesso negato. Devi fare il <a href='login.php'>login<a>."); 
    }    
    }
    ?>
    Se uso questo invece sembra che controlli solo se ho fatto il login.
    Anche se metto tutto su una sola linea if(!isset($_SESSION['login']) && $_SESSION['pagina'] != $path['basename'])) la stessa cosa.
    Domanda..la sessione pagina l'assegno quando un utente fa il login corretto quindi dovrebbe bastare il controllo $_SESSION['pagina'] != $path['basename'] , la sessione login attiva di conseguenza.. o sbaglio?In questo caso mi basterebbe togliere il controllo della sessione login e tutto funziona, non so se ha la stessa affidabilita' pero' !??
    Ultima modifica di fantacalciojarno : 17-11-2012 alle ore 17.27.02

  30. #30
    L'avatar di alemoppo
    alemoppo non  connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    18,407

    Predefinito

    S certo: puoi usare soltanto $_SESSION['pagina'], che identifica comunque univocamente l'utente.

    Ciao!

Pagina 1 di 2 12 UltimoUltimo

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •