Aiuto per le sessioni

paperinik4

Utente Attivo
29 Mag 2011
1.811
0
36
Roma
www.ricetteagogo.it
Salve a tutti,

Ho un nuovo problema. Ho creato un sito con la registrazione, con l'accesso di autenticazione (username & password), efino a qui tutto ok. Mi riconosce perfettametnte l'utente che si connette, gli dice benvenuto pincopallino. Poi c'è un file chiamato benvenuto.php che ha tre require. I require servono per chiamare la connessione al db, la visualizzazione della data e il nome del sito, e il terzo require serve per proteggere la pagina, se non sei loggato. Fino a qua tutto bene. Piccola premessa, prima si visualizzava Benvenuto superpippo (ossia lo username), poi mi sono reso conto che non era molto elegante e ho chiesto aiuto per visualizzare il nome reale dell'utente. Quindi non più "benvenuto superpippo", ma "benvenuto pippo (nome)". Nella pagina di benvenuto mi sono scordato di mettere anche un tastino "logout". E l'ho messo. Ma non riesco a capire il perchè non visualizza il benedetto tastino "logout". Una cosa sola mi è chiara, se tolgo il richiamo di paginaprotetta.php visualizza il tastino ma non la frase di "il benvenuto pipppo". Come posso risolvere ????? Posto qua il codice, se qualcuno mi può dare una mano grazie.

PHP:
LOGIN CON VISUALIZZAZIONE NOME:
========================================

<?php

require_once("connetti.php");
require_once("data.php");

session_start();

if(isset($_SESSION['utente'])) {
    $username =$_SESSION['utente'];
    $qry= "select * from utenti where username = '".$username."'";

    $result = mysql_query($qry)or die (mysql_error());
    $riga = mysql_fetch_assoc($result);
    echo "<center> <h1> <br> Benvenuto ".$riga['nome']."!";


}
else
{
	if(isset($_POST['log']))
	{
                error_reporting(E_ALL ^ E_NOTICE);

		$username = $_POST['username'];
		$password = mysql_real_escape_string(md5($_POST['password']));

                $result = mysql_query("SELECT * FROM utenti  WHERE username = '$username' AND password = '$password' ")or die (mysql_error());
                $controllo = mysql_num_rows($result);
                if($controllo > 0)
                {$_SESSION['utente'] = $username;
			header("location:benvenuto.php");
		}
		else
		{
                    	echo " <h1> <center> <br> La password e/o lo username sono sbagliati. Riprovare grazie !!! </center> </h1>";
		}
	}

	else{

		echo "<form action='' method='POST'>

                <center>
                <br> <br> <br> <br>

		Username: <input type='text' name='username'> <br> <br>
		Password: <input type='password' name='password'> <br> <br>
		<input type='submit' name='log' value='Loggati'>
                <input type='submit' name='reg' value='Registrati'>
                </center>
                </form>";
	}

}
$userreg = mysql_num_rows(mysql_query("SELECT * FROM utenti"));

         echo "<b> <br> <br>".$userreg."</b> utenti registrati</div>";
  if(isset($_POST['reg']))
	{
      header("Location:iscrizione2 - (funziona).php");
  }
?>


PAGINAPROTETTA.PHP:
========================

<?php

session_start();

session_regenerate_id(TRUE);

// Controllo accesso

if (!isset($_SESSION['utente'] ) )
{
header('location:login.php');
exit;
}
else
{
//echo "Benvenuto ".$_SESSION['$login'];
}

?>

BENVENUTO.PHP
=================

<?php

require_once("connetti.php");
require_once("paginaprotetta2.php");

?>

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title></title>

    <center>
        <form>
    <input type="submit" name="out"  id="out" value="Logout" >
</form>
    </head>
    <body>
        <?php
        // put your code here
        ?>
    </body>
</html>

Aspetto vostri consigli grazie.
 
ciao
partiamo da quello che mi salta subito all'occhio
in quella che chiami BENVENUTO.PHP
perchè metti il form fuori dai tag body?
poi a cosa punta il form? e a che ti serve il pulsante logout?
poi (anche se talvolta può andare bene) metti (in tutte) session_start() alla prima riga le inclusioni dopo.
poi se vuoi visualizzare il nome perche non passi in sessione anche quello? così lo visualizzi dove vuoi
PHP:
<?php
//.........
$result = mysql_query("SELECT * FROM utenti  WHERE username = '$username' AND password = '$password' ")or die (mysql_error()); 
if(mysql_num_rows($result) > 0){
	$riga=mysql_fetch_array($result);
	$_SESSION['nome']=$riga['nome'];//poi questa sessione la usi dove vuoi
	$_SESSION['utente'] = $username; 
	header("location:benvenuto.php"); 
}else{
//.............
?>
 
Ciao

Ciao,

Sicuramente errore di programmazione il fatto di mettere il form fuori dai tag body. Secondo il form, mi serve per poi fare l'action dei bottoni. Il logout che vorrei far visualizzare su benvenuto.php, mi serve poi se uno vuole uscire dal sito, con quello glielo permette di fare. Altrimenti, chiudendo semplicemente la schedda, credo (dico credo eprchè non ho provato), che la sessione rimanga aperta. Per quanto riguarda la prima domanda ossia: poi (anche se talvolta può andare bene) metti (in tutte) session_start() alla prima riga le inclusioni dopo. E allora la paginaprotetta.php. a che serve ?????? se metto session_stat(); su tutti i form ??? E con le modifiche che mi hai detto secondo te il tasto logou si visualizza ???? un ultima, cosa. Il pezzo di codice che mi hai postato, serve per visualizzare il nome ???? Considera che il nome non è username. Sono due cose distinte e separate. Grazie e spero di essere stato abbastanza chiaro nell'espormi.
 
ciao

Secondo il form, mi serve per poi fare l'action dei bottoni.
qui non capisco cosa intendi
Il logout che vorrei far visualizzare su benvenuto.php, mi serve poi se uno vuole uscire dal sito, con quello glielo permette di fare.
Altrimenti, chiudendo semplicemente la schedda, credo (dico credo eprchè non ho provato), che la sessione rimanga aperta.
si se chiudi semplicemente la scheda la sessione rimane, ma anche se vai ad altre pagine del sito rimane, si annulla solo se esci dal sito e/o dal bw
ma quando entri nella pag di benvenuto cosa fai? non vedo alcun altro rimando ad altre pagine, cioè in parole povere non si capisce cosa fa.
Per quanto riguarda la prima domanda ossia: poi (anche se talvolta può andare bene) metti (in tutte) session_start() .....
intanto session_start() non c'entra con la verifica se una sessione esiste o meno, tu non verifiche che esista una sessione generica ma $_SESSION['utente']
è evidente che session_start() serve solo nelle pagine in cui usi le sessioni, però il fatto di metterla prima delle inclusioni è sempre meglio, potresti impazzire perche in un file da includere hai uno spazio in più (quindi output html)
E con le modifiche che mi hai detto secondo te il tasto logou si visualizza ???? un ultima, cosa. Il pezzo di codice che mi hai postato, serve per visualizzare il nome ???? Considera che il nome non è username. Sono due cose distinte e separate.
è evidente che sono due cose, infatti ti ho scritto di estrarlo (e quella mi sembra la posizione migliore per leggerlo) dal db e di fare un'altra sessione per poi usarla dove vuoi
 
Ciao

Ciao,

Ti dico la santa verità che non ricordo più perchè ho creato la pagina di benvenuto eheheheh. Ah si, in principio, c'erano i bottoni "Aggiungi", "Cancella", "Cerca" ecc, stava nel mio archivio e quelli si vedevano perfettamente. Però quando entravo, non c'era nessuna scritta di " benvenuto pincopallino". Tanto era una cosa mia e non m'interessava averla, senza contare che ero solo l'unico utente ad entrare quindi.... E la pagina era protetta dal file paginaprotetta.php. Sul vecchio progetto che avevo fatto, funzionava perfettamente. ora qua le cose sono cambiate, perchè questo sito che sto facendo (per mio nipote), mi chiede determinate cose e determinate verifiche da fare. Cosa che se tu vedi ho fatto sul file iscrizione. Poi lui vorrebbe, poter aggiungere file caricati da youtube e immagini e la possibilità che ogni utente li possa commentare. insomma una specie di blog su misura. In ultima cosa, l'iscrizione.php. dovrebbe provvedere a mandare un'email di conferma, e l'amministratore, che sarebbe mio nipote, dovrebbe poter decidere di accettare oppure no tale iscrizione. Questo è la cosa principale. Poi vabbè le sottigliezze del tipo "mi piace", "+1" come stanno su alcuni siti e questi tipi di kazzate qua.
 
Ciao

Ok grazie. un cosniglio. Goditeli i nonni tu che ne hai e cerca sempre di soddisfare le loro esigenze. Io qualche volta con nonna mi ci arrabbiavo e mi sono poi pentito. Te lo dico da esperienza vissuta.
 
Ciao

Ciao,

Ti sei dimenticato per caso ???? Mi avevi detto che mi avresti buttato giù qualcosa. Una cosa vorrei sapere, mettento questa:

PHP:
echo "<meta http-equiv='Refresh' content='4; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";

Per ricaricare la pagina in automatico. Solo che, scompaiono tutti i dati inseriti precedentemente. Come faccio a non perderli ?????
 
Ciao

Allora, i dati precedentemente inseriti per la registrazione, quando fa il reload svaniscono e li debbo ridigitare. Ti posto un pezzo di codice di come l'ho messo.

PHP:
<?php
}else{
 $nome = mysql_real_escape_string(strtolower(trim ($_POST['nome'])));
 $username = mysql_real_escape_string(strtolower(trim ($_POST['username'])));
 $password = mysql_real_escape_string(trim ($_POST['password']));
 $passw = mysql_real_escape_string(trim ($_POST['passw']));

 //crittografa la passowrod

 $pass = mysql_real_escape_string(md5(trim($_POST['password'])));

 $errore ="";
//if($rivista ==""){$errore .= "non hai inserito il titolo della rivista<br>";}

 if($nome ==""){$errore .=  "Attenzione: il campo nome deve essere compilato. <br> <br>";}
 if($username ==""){$errore .=  "Attenzione: il campo username deve essere compilato. <br> <br>";}
 if($password ==""){$errore .=  "Attenzione: il campo password deve essere compilato. <br><br>";}
 else{

 if($password != $passw){$errore .=  "Attenzione: le due password non coincidono. <br> <br>";}
}

     // Controllo se esiste lo username nel db

$checkuser=mysql_query("SELECT username FROM utenti WHERE username='$username'");
$vuota=mysql_num_rows($checkuser);
if($vuota > 0){
	echo "<br> <br> <h1> Attenzione: lo username: ".$username." è già presente nell'archivio. Si prega di cambiare username. Grazie !!! </h1>";
echo "<meta http-equiv='Refresh' content='4; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";
exit();

}

In pratica, quando mi dice username è già occupato, ritorna indietro e svaniscono i dati.
 
Ciao

Ciao,

perdonami ma ho ulteriore bisogno di te. Sto lavorando sulle sessioni per cercare di capire il loro funzionamento. Ti posto l'intero codice del login.php e c'è sempre il benvenuto .php Ora te li posto.

PHP:
<?php
require_once("connetti.php");

session_start();

if(isset($_SESSION['utente'])) {
    $username =$_SESSION['utente'];
    $qry= "select * from utenti where username = '".$username."'";

    $result = mysql_query($qry)or die (mysql_error());
    $riga = mysql_fetch_assoc($result);
    echo "<center> <h1> <br> Benvenuto ".$riga['nome']."!";
}
else
{
	if(isset($_POST['log']))
	{
                error_reporting(E_ALL ^ E_NOTICE);

		$username = $_POST['username'];
		$password = mysql_real_escape_string(md5($_POST['password']));

                $result = mysql_query("SELECT * FROM utenti  WHERE username = '$username' AND password = '$password' ")or die (mysql_error());
                $controllo = mysql_num_rows($result);
                if($controllo > 0)
                {$_SESSION['utente'] = $username;
			header("location:benvenuto.php");
		}
		else
		{
                    	echo " <h1> <center> <br> La password e/o lo username sono sbagliati. Riprovare grazie !!! </center> </h1>";
		}
	}
}
?>

    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <title></title>
        <form action= '' method="POST">

            <font face="Comic Sans MS">

                <center>

                    <H1>INSERIRE LOGIN & PASSOWRD O REGISTRARSI</H1>

                    Username: <input type="text" name="username"  maxlength="30" size ="35" > <br> <br>

                    Password:    <input type='password' name='password'  maxlength="8" size="8"> <br> <br>
    
                </center>
            </font>
            <center>
                <input type="submit" name="log" value="Login" />
                <input type="submit" name="uscita" value="Registratti" />
            </center>

        </head>
        </body>
    </html>

Ecco il benvenuto.php

PHP:
<?php
session_start();
$username =$_SESSION['utente'];

require_once("connetti.php");

if(!isset($_POST['esci'])){

}

?>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title></title>
    </head>
    <body>
        <?php
        // put your code here
        ?>
    </body>
</html>

Tu intendevi così quando mi dicevi di mettere sulle pagine la "session_start();" Ho ho capityo male ????? Perkè funziona a kazzo dove sbaglio ????
 
ciao
da quello che ho visto tu riinvii col meta... se l'user esiste già (e immagino se user e/o pass sbagliati).
dato che si tratta di log io comunque imporrei di ridigitre il tutto, altrimenti faciliti eventuali intrusioni indesiderate (devo azzeccare solo l'user).
il fatto che il form si riempia con quello che hai scritto in precedenza (tramite cookie o sessioni) secondo me va bene solo quando nel form ci sono dei campi abbastanza lunghi,
o se devi modificare qualcosa
es. nei form contattami dove riscrivevere (es) tutto il testo può essere noioso (vedi es. nel form di contatti del mio sito dove se es. non metti l'emeil il testo scritto comunque si ripresenta.

p.s.
salvo problemi nel pomeriggio ti mando come faccio io per l'accesso alle riservate (metodo mio+genio di alex)
 

Discussioni simili