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

    Sessioni: a primo colpo va male

    Problema:
    sito in php con login e password per accedere ad area privata

    Quando faccio la login la prima volta, è come se il sistema non riesca a mettere in sessione i valori che leggo dal db.

    Se faccio INDIETRO dal browser e poi ritorno, ecco che tutto magicamente funziona.

    DA NOTARE che funziona in locale e su aruba!!!

    Cosa può essere? Devo cercare qualcosa che manca sul server???

  2. #2
    che codice usi per l'autenticazione ( quello riguardante le sessioni ) potrebbe essere di aiuto !

  3. #3
    Questo è il codice di controllo

    if ($_SESSION['confermato'] != 1) {
    exit("non puoi visualizzare la pagina");
    }


    Questo è il codice che valorizza le sessioni

    <?
    session_start();
    $user = $_POST["login"];
    $pwd = $_POST["pwd"];

    include ("mdb-database/way.php");

    $link = mysql_connect($db_host, $db_user, $db_pass, $db_name);
    $rich = "SELECT nome , pwd , id , classe , user FROM utenti WHERE user = '$user' AND pwd = '$pwd' ";

    $query = mysql_db_query ($db_name, $rich);
    $row = mysql_num_rows($query);
    $riga = mysql_fetch_object($query);

    $_SESSION['utente'] = 0;
    $_SESSION['classe'] = 0;
    $_SESSION['nome'] = 0;
    $_SESSION['confermato'] = 1;

    if($row!=0){
    $_SESSION['utente'] = $riga->id;
    $_SESSION['classe'] = $riga->classe;
    $_SESSION['nome'] = $riga->nome;
    $_SESSION['confermato'] = 1;


    header("location: gestione.php");
    }
    else{
    header("location: http://". $root . "/index.htm");
    }

    ?>

  4. #4
    Ma la sequenza delle pagine qual'e'???

    In altre parole dov'e' il riscontro che hai messo in testa al post? In quale pagina?

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  5. #5
    Il discorso è molto più semplice:
    c'è un motivo particolare per cui il tutto funziona in locale, e su alcuni server...mentre non funziona solo un server aruba???

    Il mio dubbio è che debba modificare qualcosa a livello software, ma cosa?

  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2003
    Messaggi
    320
    si può essere ma come ti dice piero.mac indica la sequenza delle pagine e dei controllo, xchè può essere che valorizzi la sessione nel posto sbagliato

  7. #7
    Questa è la pagina che prende i dati di Login, controlla che l'utente esista o meno e reindirizza nella pagina di amministrazione o riporta alla login.

    <?
    session_start();
    $user = $_POST["login"];
    $pwd = $_POST["pwd"];

    include ("mdb-database/way.php");

    $link = mysql_connect($db_host, $db_user, $db_pass, $db_name);
    $rich = "SELECT nome , pwd , id , classe , user FROM utenti WHERE user = '$user' AND pwd = '$pwd' ";

    $query = mysql_db_query ($db_name, $rich);
    $row = mysql_num_rows($query);
    $riga = mysql_fetch_object($query);

    $_SESSION['utente'] = $riga->id;
    $_SESSION['classe'] = $riga->classe;
    $_SESSION['nome'] = $riga->nome;
    $_SESSION['confermato'] = 1;

    if($row!=0){
    // Carica amministrazione (gestione.php)
    }
    else{
    // Ritorna alla login
    }

    ?>

    Questo è gestione.php

    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    </head>
    <frameset rows="134,*" frameborder="NO" border="0" framespacing="0" cols="*">
    <frame src="menu.php" name="menu" scrolling="NO" noresize id="menu" >
    <frame src="centro.php" name="centro" id="centro">
    </frameset>
    <noframes>
    <body bgcolor="#FFFFFF" text="#000000">
    </body>
    </noframes>
    </html>


    Questo è Menu.php

    <?
    session_start();
    require ("verifica.php");
    global $HTTP_GET_VARS;
    ?>
    <html>
    <head>
    <title>menu </title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <LINK REL="StyleSheet" HREF="stile/style.css" TYPE="text/css">
    <style type="text/css">
    <!--
    .Stile1 {
    font-size: 8px;
    font-family: Arial, Helvetica, sans-serif;
    }
    -->
    </style>
    </head>
    .....[continua ]

    Questo è centro.php

    <?
    session_start();
    require ("verifica.php"); ?>
    <html>
    <head>
    <title>Documento senza titolo</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <script language="JavaScript">
    <!--
    function MM_openBrWindow(theURL,winName,features) {
    window.open(theURL,winName,features);
    }
    //-->
    </script>
    <LINK REL="StyleSheet" HREF="stile/style.css" TYPE="text/css">
    </head>
    <body>
    <?
    include ("mdb-database/way.php");

    $idutent = $_SESSION['utente'];
    $classe = $_SESSION['classe'];
    $nome = $_SESSION['nome'];
    ....[continua ]



    Questo è verifica.php

    <?
    if ($_SESSION['confermato']!=1) {
    exit("non puoi visualizzare la pagina");
    }
    ?>


    Il problema lo trovo sul server di aruba, perchè la prima volta che faccio l'accesso entra in gestione.php, ma quando entra in verifica.php sembra che $_SESSION['confermato'] sia diverso da 1, e quindi mi stampa il messaggio ( non puoi visualizzare la pagina )

    In bocca al lupo a tutti coloro che si cimenteranno nell'arcano.

    Luca

  8. #8
    Velocemente osservo:

    nella prima pagina che hai postato:
    codice:
    $link = mysql_connect($db_host, $db_user, $db_pass, $db_name);
     
    $rich = "SELECT nome , pwd , id , classe , user FROM utenti 
             WHERE user = '$user' AND pwd = '$pwd' "; 
    
    $query = mysql_db_query ($db_name, $rich); 
    $row = mysql_num_rows($query); 
    $riga = mysql_fetch_object($query); 
    ....
    ....
    ecc.
    Tutto moolto discutibile.

    mysql_connect se ne fa nulla di $db_name.
    mysql_db_query e' deprecato.
    perche' vai ad estrarre user e pwd se gia' li hai. Se li trova e' perche' sono uguali. (appena parlato di questo in un recente post)

    Se controlli le righe che estrai questo lo devi fare prima di valorizzare $_SESSION e non dopo.

    Questo perche' se non hai riscontro valorizzi comunque $_SESSION['confermato'] con un bel 1, vanificando tutto il controllo.
    Forse sarebbe piu' opportuno cosi':
    codice:
    if($row == 1 ){ 
    $_SESSION['utente'] = $riga->id; 
    $_SESSION['classe'] = $riga->classe; 
    $_SESSION['nome'] = $riga->nome; 
    $_SESSION['confermato'] = 1; 
    
    // Carica amministrazione (gestione.php) 
    
    } else{ 
    // Ritorna alla login 
    }

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  9. #9
    Il codice che dovete controllare è questo:
    Questa è la pagina entra.php

    Ho provato a stampare il valore di confermato, sia qui, che in gestione.php e succede che qui il valore lo tiene in sessione, mentre appena arrivo in gestione.php, il valore si è perso.
    Se però faccio indietro e riprovo ad accedere, non mi trovo più problemi.

    L'arcano non è ancora stato svelato!!!


    <?
    session_start();
    $user = $_POST["login"];
    $pwd = $_POST["pwd"];

    include ("mdb-database/way.php");

    $link = mysql_connect($db_host, $db_user, $db_pass, $db_name);
    $rich = "SELECT nome , pwd , id , classe , user FROM utenti WHERE user = '$user' AND pwd = '$pwd' ";

    $query = mysql_db_query ($db_name, $rich);
    $row = mysql_num_rows($query);
    $riga = mysql_fetch_object($query);


    if($row == 1){
    $_SESSION['confermato'] = 1;
    $_SESSION['utente'] = $riga->id;
    $_SESSION['classe'] = $riga->classe;
    $_SESSION['nome'] = $riga->nome;


    header("location: gestione.php");
    }
    else{
    header("location: index.htm");
    }

    ?>

  10. #10
    codice:
    ?>php 
    session_start(); 
    if(isset($_POST['login']) AND $_POST['login'] != '' )  {
    
            $user = $_POST["login"];
            $pwd  = $_POST["pwd"];
    
            include ("mdb-database/way.php"); 
    
            $link = mysql_connect($db_host, $db_user, $db_pass);
    
            mysql_select_db($db_name);
    
            $rich = "SELECT nome , id , classe
                     FROM utenti
                     WHERE user = '$user' AND pwd = '$pwd' ";
    
             $query = mysql_query($rich, $link);
             $row   = mysql_num_rows($query);
             $riga  = mysql_fetch_object($query);
    
                    if($row == 1){ 
                            $_SESSION['confermato'] = 1;
                            $_SESSION['utente'] = $riga->id;
                            $_SESSION['classe'] = $riga->classe;
                            $_SESSION['nome'] = $riga->nome;
    
                            header("location: gestione.php");
                            exit;
                            }
                                  else  {
                                        header("location: index.htm");
                                        exit;
                                        }
    }
      else  {
             header("location: index.htm");
             exit;
            }
    ?>

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

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.