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 Sëniör Stäff
    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 Sëniör Stäff
    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 è connesso ora Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,144

    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 è connesso ora Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,144

    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 è connesso ora Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,144

    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.
    Sìsì, 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 è connesso ora Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,144

    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 è connesso ora Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,144

    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 è connesso ora Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,144

    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 è connesso ora Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,144

    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 è connesso ora Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,144

    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 è connesso ora Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,144

    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 è connesso ora Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,144

    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 è connesso ora Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,144

    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 è connesso ora Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,144

    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 è connesso ora Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,144

    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
  •