SESSION_ID ovvero pagina personale !

iperboreo

Utente Attivo
21 Giu 2012
126
0
16
Ciao a tutti,
ritorno sull argomento in quanto ancora non ho capito la struttura di come si crea una session_id,
ovvero intendo che ogni utente loggato si trova davanti i suoi dati ( gli articoli che ha comprato, si tratta di un negozio )

Qualcuno sa aiutarmi? dispongo di un login funzionante e non so dove inserire la sessione (crearla)

e nella pagina riservata (ma comune a tutti, sono solo i dati che cambiano) devo "richiamare la sessione"

GRAZIE PER L IMMENSO AIUTO.
 
dispongo di un login funzionante

E' li che devi creare la sessione, dopo aver fatto la query per vericare il dati di login metti l'id in sessione

PHP:
if(query di login ha successo) {
  $_SESSION['idUtente'] = $row['idUtente'];
}
nella pagina riservata puoi fare le query usando l'id in sessione
PHP:
if(isset($_SESSION['idUtente'])) {
  $query = "SELECT * FROM articoli WHERE idUtente = " . $_SESSION['idUtente'] ;
}
quando usi le sessioni a inizio pagina devi mettere
PHP:
session_start();
 
Ma non hai un login funzionante? La verifica dei dati dovrebbe venire eseguita lì. Se vuoi invece eseguirla in ogni pagina per vedere se i valori in sessione corrispondono ancora a quelli dell'utente nel database (un amministratore potrebbe aver cambiato la password dell'utente nel frattempo) ti consiglio di creare una funzione che automatizzi il processo:
PHP:
function checkUser($username, $password)
{
    // ottieni un'istanza di $pdo in qualche modo, come parametro della funzione
    // oppure usando l'iniezione delle dipendenze, ma evita le variabili globali

    $stm = $pdo->prepare('SELECT * FROM users WHERE username = :username AND password = MD5(:password)');
    $stm->execute(array(
        ':username' => $username,
        ':password' => $password,
    ));

    return ($stm->rowCount() == 1);
}
Quindi in cima alle tue pagine inserirai:
PHP:
<?php
if (!checkUser($_SESSION['username'], $_SESSION['password'])) {
    // onestamente qui sono indeciso se utilizzare 401 Unauthorized
    // oppure 403 Forbidden, vedi un po' tu
    header('HTTP/1.0 401 Unauthorized');
    header('Location: login.php');

    exit();
}

// ...
?>
 
Ciao

Ciao Alessandro,

Il problema, è che non mi riconosce ne lo username e ne la password, se vuoi ti posto le pagine che ho fatto di iscrizione.php, login.php, e paginaris.php

Iniziamo con postarti la tabella utenti:

PHP:
create table utenti (

id 		INT UNSIGNED NOT NULL AUTO_INCREMENT,
nome 		VARCHAR(30) NOT NULL,
cognome 	VARCHAR(30) NOT NULL,
username 	VARCHAR(30) NOT NULL,
email           VARCHAR(40) NOT NULL,
password        VARCHAR(255) NOT NULL,
autorizzato 	ENUM('0', '1') DEFAULT '0',
PRIMARY KEY (id)
);

Poi a seguito viene la pagina d'iscrizione.php eccola questa funziona a perfezione, secondo me:

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


if (!isset($_POST['reg'])) {
    ?>
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <title>Modulo d'iscrizone</title>

        <center>   <H1>BENVENUTO NEL SITO D'ISCIRIZIONE PROVA</H1>

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

                <font face="Comic Sans MS">

                Nome:     <input type="text" name="nome"  maxlength="30" size ="32"> <br> <br>
                Cognome:  <input type="text" name="cognome"  maxlength="30" size ="32"> <br> <br>
                Username: <input type="text" name="username"  maxlength="30" size ="32"> <br> <br>
                 Email:    <input type="text" name="email"  maxlength="40" size ="42"> <br> <br>
                 Rip-Email: <input type="text" name="ripemail"  maxlength="40" size ="42"> <br> <br>
                 Password: <input type="password" name="password"  maxlength="12" size ="14"> <br> <br>
                 Rip-Passw: <input type="password" name="passw"  maxlength="12" size ="14"> <br> <br>
                </font>
                <center>
                    <input type="submit" name="reg" value="Invio iscrizione" />
                    <input type="submit" name="uscita" value="Uscita" />
                </center> </form>
        </head>
        <body>



    <?php
    
} else {
 $nome = mysql_real_escape_string(strtolower(trim ($_POST['nome'])));
 $cognome = mysql_real_escape_string(strtolower(trim ($_POST['cognome'])));
 $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']));
 $email = mysql_real_escape_string(trim ($_POST['email']));
 $ripemail = mysql_real_escape_string(trim ($_POST['ripemail']));


//crittografa la passowrod

$pass = mysql_real_escape_string(md5(trim($_POST['password'])));
 
// verifico la presenza dei campi obbligator
    
$ok_ko ="";

 //controllo campi compilati

if($nome ==""){$ok_ko .=  "Attenzione: il campo nome deve essere compilato. <br> <br>";}
if($cognome ==""){$ok_ko .=  "Attenzione: il campo cognome deve essere compilato. <br> <br>";}
if($username ==""){$ok_ko .=  "Attenzione: il campo username deve essere compilato. <br> <br>";}
if($email ==""){$ok_ko .=  "Attenzione: il campo email deve essere compilato. <br> <br>";}
 if($password ==""){$ok_ko .=  "Attenzione: il campo password deve essere compilato. <br><br>";}
 
 
 if($password != $passw){$ok_ko .=  "Attenzione: le due password non coincidono. <br> <br>";}
 
// Controllo se lo username è presente nel db

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

}
  
//controllo scrittura corretta dell'email
 
 if(!filter_var($email, FILTER_VALIDATE_EMAIL)||!filter_var($ripemail,FILTER_VALIDATE_EMAIL)){
     
             $ok_ko .= "indirizzo email non valido<br>";
 //   } //chiude il controllo scrittura corretta dell'email 

        // Controlla se le due email coincidono

if($email != $ripemail){$ok_ko .=  "Attenzione: le due email non coincidono. <br> <br>";}
} //chiude il controllo scrittura corretta dell'email

// Controllo se esiste l'email nel db

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

}

if($ok_ko !=""){
		echo "<h1>$ok_ko</h1>";
		echo "<meta http-equiv='Refresh' content='3; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";
exit();
}else{
 
 $query="INSERT INTO utenti(nome, cognome, username, email, password)  VALUES('$nome','$cognome','$username','$email','$pass')";
//var_dump($query);//qui dovresti vedere se la query si forma come dovrebbe
$q_i=mysql_query($query);//qui se registra, se bool false errore, se resuorce... è a posto
var_dump($q_i);
   
echo "<h1> <br>Utente registrato correttamente. Controlla la tua email per accedere al sito</h1>";
//e torno al form 
//header("Refresh: 2;URL=paginaris.php");     
header("Refresh: 2;URL=login.php");          
}
}
?>

Dopo di che, ti posto la pagina di login.php che non funziona a fatto. E' incompleta perchè sto cercando di capire il motivo per cui non va.

PHP:
<?php

require_once("connetti.php");

if (!isset($_POST['log'])) {
   
        
    ?>
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <title>Loggati</title>

        <center>   <H1>AREA RISERVATA: PREGO EFFETTUARE IL LOGIN </H1>

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

                <font face="Comic Sans MS">

                
Username: <input type="text" name="username"  maxlength="30" size ="32"> <br> <br>
Password: <input type="password" name="password"  maxlength="12" size ="14"> <br> <br>
                
 </font> 
 
 
                <center>
                    <input type="submit" name="log" value="Loggati" />
                    <input type="submit" name="uscita" value="Uscita" />
                </center> </form>
        </head>
        </body>
<?php
session_start();
$query = "SELECT id,username FROM utenti WHERE username='$username' AND password='$pass'";
    $cerco = mysql_query($query);
    if(!$cerco) {
        echo "Errore query: <br/>$query<br/>" . mysql_error();
    mysql_error();
    }else{
        echo $query;
    }  
    }  
   
?>

In ultimo ti posto la paginaris.php

PHP:
<?php

require_once("connetti.php");

session_start();

var_dump($_SESSION);

if ($_SESSION['username'] == 0) {
    
    echo "Ciao " . $_SESSION['username'];
} else {
    echo "Accesso non consentito";
} 

?>

Spero che mi potrai aiutare anche tu, considera che non voglio la pappa pronta, ma voglio capire il motivo per cui non funziona.
 
Mi intrometto nella discussione, visto che l'argomento è simile.
Ho ua pagina register.php dove effettuo la registrazine dell'utente ed altre due pagine per il controllo e l'inserimento in db dei dati. Quando clicco su invia, e quindi mi invia i dati per la registrazione mi trovo davanti alla fatidica pagina errore 404. Sapreste dirmi che cosa può essere? Uso xampp.
qui i due codici register
PHP:
<?php
	include 'header.php';
	
?>

	<div id="wrapper">
    
    <?php
		if (!isset($_GET['passkey'])){
			
				if(!isset($_POST['invia'])){
	?>
        
        <form action="post" action="#" id="formregistrazione">
        
        <label for="username">Username</label>
        <input type="text" name="username" id="username"> <br>
        
        <label for="password1">Password</label>
        <input type="password" name="password1" id="password1"><br>

        <label for="password2">Ripeti la Password</label>
        <input type="password" name="password2" id="password2"><br>
        
        <label for="email">Email</label>
        <input type="text" name="email" id="email"><br>
        
        <input type="submit" name="invia" id="registrati" value="registrati">
        </form>

        
					
	<?php	} else {
			
				//Creazione codice conferma
				$codice_conferma = md5(uniqid(rand()));
				
				// Valori del form
				$username = mysql_real_escape_string($_POST['username']);
				$password1 = mysql_real_escape_string($_POST['password1']);
				$password2 = mysql_real_escape_string($_POST['password2']);
				$email = mysql_real_escape_string($_POST['email']);
				
				// controllo campi vuoti e password
				
if ($username == "" || $email == ""){
	echo "Devi riempire tutti i campi";
	} elseif($password1 == "" || $password2 == ""){
	echo "Devi riempire tutti i campi";
	} elseif ($password2 != $password1) {
	echo"Le password devo essere uguali";
	} else {
	$recuperusermail = mysql_query("SELECT id FROM utenti WHERE username='$username' OR email='$email'");
	$contausermail = mysql_num_rows("$recuperauseremail");
	if ($contausermail > 0) {
	echo "Nome utente o Email già disponibile";
	}else{
	// Invia i dati aldatabase mysql
	$inviautentitemp = mysql_query("INSERT INTO utenti_temp(codiceconferma, username, password, email) VALUE ('$codice_conferma', '$username', '$password2', '$email')");
	} if ($inviautentitemp) {
	$to = $email;
	$subject = "Conferma la registrazione";
	$message = "Ecco il tuo codice di attivazione \r\n";
	$message .="Clicca sul link per confermare la registrazione \r\n";
	$message .="http://127.0.0.1/register.php?passkey=$codiceconferma";
	
	$sentmail = mail($to,$subject,$message,$header);
	
	}
	
	if ($sentmail){
		echo"Se la registrazione è ok clicca sul link per la conferma";
	}else {
	echo "Errore, invio del link di attivazine non inviato";
	}
	}
	}
	} 



		
	?>
    
    
    </div>
    
</body>
</html>
 
ciao
scusa ma non ho capito bene:
ti da errore quando clicchi sul pulsante di submit o quando clicchi sul link dell'email?
a parte che un link dovrebbe essere

PHP:
 $message .="<a href=\"http://127.0.0.1/register.php?passkey=$codiceconferma\">clicca qui per confermare</a>";
 
ciao
scusa ma non ho capito bene:
ti da errore quando clicchi sul pulsante di submit o quando clicchi sul link dell'email?
a parte che un link dovrebbe essere

PHP:
 $message .="<a href=\"http://127.0.0.1/register.php?passkey=$codiceconferma\">clicca qui per confermare</a>";

l'errore me lo da quando clicco Invia cioè submit. Invece di darmi l'ok per l'invio e poi andare a controllare la mail ho errore 404.
 
ciao
correggi

<form action="post" action="#" id="formregistrazione">
con
HTML:
<form method="post" action="#" id="formregistrazione">

e migliora i controlli sugli input
 
Ok grazie. Corretto ma sempre lo stesso errore 404 mi da. Cosa intendi migliore i controlli su gli input? Cosa dovrei inserire? Tieni conto che ho appena iniziato a lavorare in php quindi sono proprio alle basi. Grazie ancora.
 
ciao
hai vuotato la cache quando hai riprovato? non vedo errori per cui dovrebbe darti 404 (salvo che tu non abbia qualcosa di particolare nel file che includi).
poi prima vediamo di risolvere il 404 poi ti dico i controlli
 
cosa intendi per svuotere la cache? Dopo aver corretto il codice ho caricatola pagina inxampp come sempre quindi non saprei dove andare. Può dipendere dalla configurazione di xampp?
 
ciao
se usi FF vai su strumenti->opzioni->svuota cache.
come detto non vedo altre ragioni per il 404
comunque prova a mettre stringa vuota al posto di #
action =""
oppure meglio

action="<?php echo $_SERVER['PHP_SELF'];?>"
 
Ciao borgo, probabilmente era un problema di cache non saprei, oggi funziona tutto. O meglio, una volta registratomi mi invia la mail ma quando clicco sul link non mi appare l'ok della registrazione. ho notato che la stringa in alto invece di essere login.php?azione=login mi appare login.php=azione=login quindi non mi accetta nulla e ho nuovamente pagina 404. Da cosa può dipendere?

Quanto invece a i controlli che cosa mi consigliavi di fare?
 
ciao
O meglio, una volta registratomi mi invia la mail ma quando clicco sul link non mi appare l'ok della registrazione. ho notato che la stringa in alto invece di essere login.php?azione=login mi appare login.php=azione=login quindi non mi accetta nulla e ho nuovamente pagina 404. Da cosa può dipendere?
parli del link che dovresti trovare sull'email di conferma?
se si, posta la parte di codice che lo forma
 
la mail di risposta ha questo codice
PHP:
http://127.0.0.1/siti/Biblionet%20test%20MySql/register.php?passkey=d6bf32ec68d7e8a6ec16a8721b67a26d
mentre se clicco sulla voce login che mi trovo nel piccolo menù mi appare questo
PHP:
http://siti/Biblionet%20test%20MySql/login.php=azione=login
e come si vede nella parte finale c'è login.php=azione=login

Il problema è che cliccando sul link della mail mi apre si la pagina del sito con la passkey ma non tovo nessun messaggio di conferma dell'avvenuta registrazione. E di conseguenza nel db non ho il nome utente registrato correttamente.
 
problema del
PHP:
login.php=azione
risolto. era come me lo aspettavo un errore di digitazione. Ragazzi è impossibile se non si sta attenti a quello che scriviamo qua non funziona nulla. :crying::mavieni::cool:

Riame il problema dei controlli che mi dicevi. Come posso migliorarlo?
 

Discussioni simili