Funzione ricorda in un form di login

Stato
Chiusa ad ulteriori risposte.

Lucart98

Nuovo Utente
15 Apr 2011
22
0
0
So che è un argomento abbastanza discusso ma sul web non ho trovato niente.
Allora... io ho una pagina di Login (index.php) e dovrei mettere come al solito una checkbox che permette di ricordare (con un cookie, no?) i dati inseriti (quindi username e password) per 2 settimane, finchè non si va alla pagina logout.php e quindi la sessione viene terminata e i cookie cancellati.

Ecco il form login + la parte in php (vi metto i commenti per capire meglio com'è strutturato):
PHP:
<!-- INIZIO CODICE RICONOSCIMENTO (LOGIN) -->
<?php 
session_start(); 
require('templates/reg/connessionedb.php'); //collegamento al database

if(!isset($_SESSION['log']))  
{ 
 $_SESSION['log'] = 0; 
} 
if(!isset($_SESSION['username']))  
{ 
 $_SESSION['username'] = "anonimo"; 
} 

//controllo se l'utente è loggato
if ($_SESSION['log'] != 1) 
{ 
 // se non lo è procediamo così: 
 if(isset($_POST['pass']) && isset($_POST['user'])) 
 { 
  $qry_pass = mysql_real_escape_string(md5($_POST['pass'])); 
  $qry_user = mysql_real_escape_string($_POST['user']); 
//verifico user e pass
  $query = "SELECT * " . 
            "FROM user " . 
            "WHERE user_username = '$qry_user' " . 
            "AND user_password = '$qry_pass' " . 
            "AND user_reg = 1 "; 
  $results = mysql_query($query) or die (mysql_error()); 

  if(mysql_num_rows($results) != 0) 
  {  
   $row = mysql_fetch_array($results); 
   $_SESSION['log'] = 1; // utente loggato 
   $_SESSION['username'] = $row['user_username']; 
  } 
 } 
} 
echo "Ciao " . $_SESSION['username'] . "!"; //ecco stampato il nome utente. Se invece non è loggato, verrà stampato "Ciao anonimo!"
?> 
<!-- FINE CODICE RICONOSCIMENTO (LOGIN) -->
<!-- INIZIO CONDIZIONE "SE NON SI È LOGGATI" --></td>
	<?php 
if ($_SESSION['log'] != 1) 
{ 
?> 
<td>
<a href="Registrazione.php">Registrati</a> o effettua il login:&nbsp;
</td>
<td width="500">
<form name="login" action="mix-color.php" method="post" onSubmit="return ver();"> 
Username
<input name="user" type="text" size="15" maxlength="11">
Password
<input name="pass" type="password" maxlength="8">
<input type="submit" name="submit" class="button_top" value="Login"> 
</form> 
<!-- FINE CONDIZIONE "SE NON SI È LOGGATI" -->
<!-- INIZIO CONDIZIONE ELSE -->
<?php 
}else { 
?> 
<td width="700"><form name="logout" action="templates/reg/logout.php" method="post" onSubmit="return ver();"> 
<input type="submit" name="submit" class="button" value="Logout"> 
</form> //form di logout
<?php 
} 
?>
<!-- FINE CONDIZIONE ELSE -->

Ringrazio vivamente chi mi aiuterà nel risolvere questo problema!
 
Inserisci un campo di input in cui richiedi se le informazioni del login devono essere ricordate, se il campo viene selezionato scrivi le informazioni di sessione su un cookie.
 
WOW! Ci avessi capito una virgola!

$value = '???'; //qua dovrei mettere $_POST al form?
setcookie("TestCookie", $value, time()+3600); //e qui su TestCookie che dovrei mettere?

Ciao!
 
Hai il tuo checkbox ok?
PHP:
<?php
if(!isset($_COOKIE['ricorda_login'])) {?>
    <input name="ricorda" value="1" type="checkbox" /><?php
}?>
Visibile se non cè il cookie.
Quando fai il submit memorizzi questo:

setcookie("ricorda_login", $_POST['ricorda'], time()+3600);
 
Grazie.
Adesso: come faccio a cancellare un cookie quando l'utente va alla pagina del logout?
Poi non riesco a capire dove devo mettere il setcookie :-(
Grazie!
 
Ultima modifica:
Scusa l'action del form di login dove punta??
Lì devi memorizzare il cookie!
if(login avvenuto correttamente) {
qui fai il setcookie
}

Stessa cosa quando fai il logout ma stavolta gli fai un
unset($_COOKIE['ricorda_login'])

Forse cè un metodo migliore x eliminare un cookie.... ma non lo so :p
 
Il login avviene tutto in una pagina, e il codice della pagina l'ho messo nel primo post.
Per l'"unset" del cookie non importa quanto sia efficacie, basta che funzioni correttamente.
Ciao!
 
Adesso avviene tutto in una pagina

PHP:
<?php
session_start();
require('templates/reg/connessionedb.php'); //collegamento al database 

//$_SESSION['log'] e $_COOKIE['ricorda_log'] conterranno l'id dell'utente loggato
//In $row['id'] id potrebbe essere diverso a seconda di come hai chiamato la chiave primaria nella tabella user
if(!isset($_SESSION['log'])) {
	if(isset($_POST['login'])) {
		if(!isset($_POST['user'])) {
			$MSG="Inserire l'username";
		}
		elseif(!isset($_POST['pass']))
			$MSG="Inserire la password";
		if(!$MSG) {
			$qry_pass = mysql_real_escape_string(md5($_POST['pass']));
			$qry_user = mysql_real_escape_string($_POST['user']);
			$query = "SELECT * FROM user WHERE user_username = '$qry_user' ";
			$query.="AND user_password = '$qry_pass' AND user_reg = 1 ";
			$results = mysql_query($query) or die (mysql_error());
			
			if(mysql_num_rows($results)) {
				$row = mysql_fetch_array($results);
				$_SESSION['log'] = $row['id']; // utente loggato
				if(isset($_POST['ricorda_log'])) {
					setcookie("log", $row['id'], time()+3600*14);//14 giorni
				}
				$MSG="Login effettuato correttamente.";
			}
			else {
				$MSG="Dati per il login non corretti.";
			}
		}
	}
	elseif(isset($_POST['logout'])) {
		setcookie("log", $_SESSION['log'], -1);//Elimino il cookie
		session_destroy();
		$MSG="Sei uscito dalla sessione";
	}
}

echo "Ciao ";
if($_SESSION['log']) {
         $q="SELECT user_username FROM user WHERE id='".$_SESSION['log']."' LIMIT 1";
         $q=mysql_query($q);
         echo mysql_result($q,0,'user_username');
}
else echo "anonimo";
echo "!";

if($MSG) {
	echo "<div>$MSG</div>";
}?>
<form id="login" action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">
<table>
<tr><?php
if(isset($_COOKIE['ricorda_log'])) {
	$_SESSION['log']=$_COOKIE['ricorda_log'];
}
if(!isset($_SESSION['log'])) {?>
		<td colspan="2" align="center">
			<a href="Registrazione.php">Registrati</a> o effettua il login:
		</td>
	</tr>
	<tr>
		<td align="right" width="500">Username:</td>
		<td><input name="user" type="text" size="15" maxlength="11" value="<?php echo $_POST['user'];?>" /></td>
	</tr>
	<tr>
		<td align="right">Password:</td>
		<td><input name="pass" type="password" maxlength="8" /></td>
	</tr>
	<tr>
		<td align="right"><input name="ricorda_log" type="checkbox" value="1"<?php
		if($_POST['ricorda_log']==1)
			echo ' checked="checked"';?> /></td>
		<td>Ricorda login</td>
	</tr>
	<tr>
		<td coslpan="2">
			<input type="submit" name="login" class="button_top" value="Login" />
		</td><?php
}
else {?>
	<td width="700">
		<input type="submit" name="logout" class="button" value="Logout" />
	</td>
	<?php
}?>
</tr>
</table>
</form>

Poi dite ke non vi voglio bene! :elvis:
 
Ultima modifica:
EDIT: scusate ho risolto da solo dopo 1 minuto dall'aver postato.
Chiedo scusa
 
Ultima modifica:
Dandogli una lettura veloce ho notato quella @ di troppo...
PHP:
}
elseif (@$_SESSION['utente'] == "ok" || $_COOKIE['tipo'] == 'utente') //
{

EDIT:
Come non detto...
 
La chiocciola serve per rimuovere l'errore notice;
Il problema riscontrato è che come al solito avevo fatto casino tra i nomi delle sessioni e dei cookie...e non so perchè ogni volta che scrivo il thread per chiedere aiuto, 2 minuti dopo risolvo sempre da solo...sempre, boh !!
Grazie comunque :)
 
Stato
Chiusa ad ulteriori risposte.

Discussioni simili