mantenere sessione login attiva anche in altre pagine

  • Creatore Discussione Creatore Discussione asevenx
  • Data di inizio Data di inizio

asevenx

Utente Attivo
7 Nov 2009
312
0
16
salve, ho creato questa pagina per il login, il tutto funzionante, ma vorrei mantenere le sessioni attive anche in altre pagine. Cioè vorrei che il nome utente fossero disponibile anche in altre pagine, senza dover rieseguire il login. Grazie

PHP:
<?php
$DB_host = "localhost";
$DB_user = "...";
$DB_password = "";
$DB_name = "...";
$DB_tabella2 = "utenti";

$link = mysql_connect($DB_host, $DB_user, $DB_password);
if (!$link) {
	die ('Non riesco a connettermi: ' . mysql_error());
}

$db_selected = mysql_select_db($DB_name, $link);
if (!$db_selected) {
	die ("Errore nella selezione del database: " . mysql_error());
}

if($_POST) {
	effettua_login();
} else {
	mostra_form();
}

function mostra_form()
{
	// mostro un eventuale messaggio
	if(isset($_GET['msg'])) {
		echo '<div class="titolo">'.htmlentities($_GET['msg']).'</div><br />';
		
		if ($_GET['msg'] == "Login avvenuto con successo"){				

?>
	<form name='commenta' method='post' action='commento.php'>
		<table width="98%" border="0" cellpadding="0" cellspacing="0">
			<tr>
				<td colspan="2" class="partita">Benvenuto <label class="notizia"><?php echo $_SESSION['utente']; ?>!</label></td>
			</tr>
			<tr>
				<td class="cella8"><?php echo $_SESSION['utente']; ?><br /><br />
                <img class="avatar" src="<?php echo $_SESSION['user_avatar']; ?>"/></td>
				<td class="cella4"><textarea name="mex" style="width:380px; height:100px;">Lascia un commento...</textarea></td>
			</tr>
            <tr>
				<td colspan="2" class="cella4">
                	<input type='submit' name='accedi' value='Invia!'><input type='reset' name='cancella' value='Cancella'> 
                </td>
			</tr>
		</table>
	</form>
<?php
		}
		
	}
?>


	<form name='commenta' method='post' action='index.php'>
                                    
		<table width="98%" border="0" cellpadding="0" cellspacing="0">
			<tr>
				<td colspan="3" class="partita">Effettua login per inserire un commento</td>
			</tr>
			<tr>
				<td class="cella4" style="width:75px;">Username: </td>
				<td class="cella4" style="width:150px;"><input type="text" name="nome" style="width:125px;"></td>
				<td class="cella3" rowspan="4">Nuovo utente? <br /><a href="registrati.php" class="cella4">Registrati</a></td>
			</tr>
			<tr>
				<td class="cella4" style="width:75px;">Password: </td>
				<td class="cella4" style="width:150px;"><input type="password" name="password" style="width:125px;">
			</tr>
			<tr>
				<td class="cella3" colspan="2">Dati dimenticati?</td>
			</tr>
			<tr>
				<td colspan="2" class="cella3">
                	<input type='submit' name='accedi' value='Invia!'>
                    <input type='reset' name='cancella' value='Cancella!'> 
                </td>
          	</tr>
		</table>

	</form>

<?
}

function effettua_login()
{
	// recupero il nome e la password inseriti dall'utente
	$nome      = trim($_POST['nome']);
	$password  = trim($_POST['password']);
	// verifico se devo eliminare gli slash inseriti automaticamente da PHP
	if(get_magic_quotes_gpc()) {
		$nome      = stripslashes($nome);
		$password  = stripslashes($password);
	}

		// verifico la presenza dei campi obbligatori
		if(!$nome || !$password) {
			$messaggio = urlencode("Non hai inserito il nome o la password");
			//header("location: $_SERVER[PHP_SELF]?msg=$messaggio");
			echo '<div class="titolo">Non hai inserito il nome o la password</div><br />';
?>		
	<form name='commenta' method='post' action='index.php'>
                                    
		<table width="100%" border="0" cellpadding="0" cellspacing="0">
			<tr>
				<td colspan="3" class="partita">Effettua login per inserire un commento</td>
			</tr>
			<tr>
				<td class="cella4" style="width:75px;">Username: </td>
				<td class="cella4" style="width:150px;"><input type="text" name="nome" style="width:125px;"></td>
				<td class="cella3" rowspan="4">Nuovo utente? <br /><a href="registrati.php" class="cella4">Registrati</a></td>
			</tr>
			<tr>
				<td class="cella4" style="width:75px;">Password: </td>
				<td class="cella4" style="width:150px;"><input type="password" name="password" style="width:125px;">
			</tr>
			<tr>
				<td class="cella3" colspan="2">Dati dimenticati?</td>
			</tr>
			<tr>
				<td colspan="2" class="cella3">
                	<input type='submit' name='accedi' value='Invia!'>
                    <input type='reset' name='cancella' value='Cancella!'> 
                </td>
          	</tr>
		</table>

	</form>		
<?php			
		} else {
	
	// effettuo l'escape dei caratteri speciali per inserirli all'interno della query
	$nome     = mysql_real_escape_string($nome);
	$password = mysql_real_escape_string($password);	

	// preparo ed invio la query
	$query = "SELECT * FROM utenti WHERE nome = '$nome' AND pass = MD5('$password')";
	$result = mysql_query($query);
			// controllo l'esito
			if (!$result) {
				die("Errore nella query $query: " . mysql_error());
			}

			$record = mysql_fetch_array($result);

			if(!$record) {
				//$messaggio = urlencode('Nome utente o password errati');
				//header("location: $_SERVER[PHP_SELF]#msg=$messaggio");
				echo '<div class="titolo">Nome utente o password errati</div><br />';
?>		
	<form name='commenta' method='post' action='index.php'>
                                    
		<table width="100%" border="0" cellpadding="0" cellspacing="0">
			<tr>
				<td colspan="3" class="partita">Effettua login per inserire un commento</td>
			</tr>
			<tr>
				<td class="cella4" style="width:75px;">Username: </td>
				<td class="cella4" style="width:150px;"><input type="text" name="nome" style="width:125px;"></td>
				<td class="cella3" rowspan="4">Nuovo utente? <br /><a href="registrati.php" class="cella4">Registrati</a></td>
			</tr>
			<tr>
				<td class="cella4" style="width:75px;">Password: </td>
				<td class="cella4" style="width:150px;"><input type="password" name="password" style="width:125px;">
			</tr>
			<tr>
				<td class="cella3" colspan="2">Dati dimenticati?</td>
			</tr>
			<tr>
				<td colspan="2" class="cella3">
                	<input type='submit' name='accedi' value='Invia!'>
                    <input type='reset' name='cancella' value='Cancella!'> 
                </td>
          	</tr>
		</table>

	</form>		
    
<?php		
			} else {
		$_SESSION['user_id'] = $record['id'];
		$_SESSION['user_avatar'] = $record['avatar'];
		$_SESSION['utente'] = $nome;
		
		//$messaggio = urlencode('Login avvenuto con successo');
		//header("location: $_SERVER[PHP_SELF]?msg=$messaggio");
		echo '<div class="titolo">Login avvenuto con successo</div><br />';	
?>

	<form name='commenta' method='post' action='commento.php'>
		<table width="98%" border="0" cellpadding="0" cellspacing="0">
			<tr>
				<td colspan="2" class="partita">Benvenuto <label class="notizia"><?php echo $_SESSION['utente']; ?>!</label></td>
			</tr>
			<tr>
				<td class="cella8"><input readonly='readonly' name='nome' class="cella11" value='<?php echo $_SESSION['utente']; ?>' /><br /><br />
                <img class="avatar" src="<?php echo $_SESSION['user_avatar']; ?>" /></td>
				<td class="cella4"><textarea name="mex" style="width:380px; height:100px;">Lascia un commento...</textarea><br />
                <input type='text' style='display: none' name='data' readonly='readonly' value='<?php echo date("y/m/d");?>'>
                <input type='text' style='display: none' name='ora' readonly='readonly' value='<?php echo date("H:i");?>'></td>
			</tr>
            <tr>
				<td colspan="2" class="cella4">
                	<input type='submit' name='accedi' value='Invia!'><input type='reset' name='cancella' value='Cancella'> 
                </td>
			</tr>
		</table>
	</form>
<?php

		}
	}
}
?>
 
devi per forza effettuare una query per ogni pagina, che va a prendere il nome utente e la passoword e le confronta con quelle nel cookie.
 
devi per forza effettuare una query per ogni pagina, che va a prendere il nome utente e la passoword e le confronta con quelle nel cookie.
da quel poco che sono riuscito a capire, per il login ho usato le sessioni, e non i cookie.. non sono due cose diverse? scusatemi l'ignoranza...

ovviamente ad inizio della pagina ho inserito il session_start()
 
Ah non so aiutarti allora scusa.

Di solito si usano i cookie perché almeno se chiudi tutto e torni il giorno dopo ti ritrovi ancora loggato.
 
cmq credo di aver risolto semplicemente così

PHP:
<?php
//apro la sessione per cercare i dati del login
session_start();

//repero i dati...
$id	= $_SESSION['user_id'];
$avatar = $_SESSION['user_avatar'];
$nome =	$_SESSION['utente'];
?>
 
ciao
l'istruzione session_start() DEVE essere ripetuta in tutte le pagine in cui si usano le sessioni o per valorizzarle o per leggerle
e deve essere sempre la prima istruzione (anche prima del <!DOCTYPE HTML>)
 
questo codice lo inserisci in ogni pagina ?

La variabile di sessione $_SESSION (così come altre variabili) sono globali; quindi valgono in tutto il progetto.
Può utilizzare $_SESSION['user_id'] (e le altre) direttamente ma se vuole salvarle in variabili 'normali' (come ha fatto) allora deve farlo per ogni pagina.
 

Discussioni simili