Problema con cookie e session

di il
12 risposte

Problema con cookie e session

Salve, sto programmando un piccolo sito web e avrei bisogno di memorizzare un cookie per il login. Ma quando cerco di fare il login attivando l'opzione del cookie mi da errore dicendo che l'header è gia stato inviato. Inoltre, quando cerco di visualizzare il messaggio di saluto (div Alto) al posto del messaggio viene visualizzato solo uno 0. Ecco il codice della pagina di login. Come posso risolvere?

<?php
	include 'config.php';
	connect();
session_start();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Harchius</title>
<link href="style.css" rel="stylesheet" type="text/css" /></head>
<body id="Body">
<div id="Banner"><img src="images/portable os.jpg" width="603" height="132" />
  <noscript></noscript>
</div>
<div id="Alto">
<?php
  	$user;
	if (isset($_COOKIE["portableos"])){
      $user = "Benvenuto su Portable OS, " + $_COOKIE["portableos"];
	} else {
		if(isset($_SESSION['utente'])){
			$user = "Benvenuto su Portable OS, " + $_SESSION['utente'];
		} else {
			$user = "Benvenuto su Portable OS, visitatore. Fai click <a href=./login.php?azione=login target=_self>qui</a> per fare il login.";
		}
	}
	echo $user;
?>
  </p>
</div>
<div id="Contenuto">
	
		<?php
		
			$p = $_GET['azione'];
			
			if($p == "login"){
			
				if(!isset($_POST['invia'])){ ?>
					
					<form method="post" action="#" id="formlogin">
					
						<p>
						  <label for="username">Username</label>
						  <br/>
						  <input type="text" name="username" id="username" /><br/>
						  <label for="password">Password</label>
						  <br/>
						  <input type="password" name="password" id="password" /><br/>
						  <input type="submit" name="invia" id="login" value="Accedi" />
                          <input name="cookie" type="checkbox" id="cookie" />
                          <label for="cookie">Ricordami per 30 giorni</label>
						  
					  </p>
						<p>Non sei registrato? <a href="register.php" target="_self">Registrati ora</a>.</p>
					</form>
					
<?php 			} else {

					$username = mysql_real_escape_string($_POST['username']);
					$password = mysql_real_escape_string($_POST['password']);
					
					if($username == "" || $password == ""){
					
						echo "Attenzione, devi compilare tutti i campi";
						?>
						<script type="text/javascript">
							function doRedirect() {
								location.href = "http://portableos.heliohost.org/login.php?azione=login";
							}
							window.setTimeout("doRedirect()", 2000);
						</script>
						<?php
						
					} else {
					
						$password_cript = md5($password);
						
						$recuperadati = mysql_query("SELECT * FROM utenti WHERE username = '$username' AND password = '$password_cript'");
						
						$verificadati = mysql_num_rows($recuperadati);
						
						if($verificadati == 1){
							
							$sessione = mysql_fetch_array($recuperadati);
							if(isset($_POST['cookie'])) {
								setcookie("portableos", $sessione['username'], time() +2592000);
							}
							$_SESSION['utente'] = $sessione['username'];
							echo "Login effettuato con successo!";
							?>
							<script type="text/javascript">
								function doRedirect() {
									location.href = "http://portableos.heliohost.org/index.php";
								}
								window.setTimeout("doRedirect()", 2000);
							</script>
							<?php
						
						} else {
						
							echo "Errore, controlla i dati inseriti!";
							?>
							<script type="text/javascript">
								function doRedirect() {
									location.href = "http://portableos.heliohost.org/login.php?azione=login";
								}
								window.setTimeout("doRedirect()", 2000);
							</script>
							<?php
						
						}
					
					}
				
				}
			
			
			} elseif ($p == "logout"){
			
				session_destroy();
				setcookie("portableos");
				echo "Logout effettuato con successo!";
				?>
				<script type="text/javascript">
					function doRedirect() {
						location.href = "http://portableos.heliohost.org/index.php";
					}
					window.setTimeout("doRedirect()", 2000);
				</script>
				<?php
			
			} elseif ($p == "redir"){
			
				if(!isset($_POST['invia'])){ ?>
					
					<form method="post" action="#" id="formlogin">
					
						<p>
						  <label for="username">Username</label>
						  <br/>
						  <input type="text" name="username" id="username" /><br/>
						  <label for="password">Password</label>
						  <br/>
						  <input type="password" name="password" id="password" /><br/>
						  <input type="submit" name="invia" id="login" value="Accedi" />
                          <input name="cookie" type="checkbox" id="cookie" />
                          <label for="cookie">Ricordami per 30 giorni</label>
						  
					  </p>
						<p>Non sei registrato? <a href="register.php" target="_self">Registrati ora</a>.</p>
					</form>
					
<?php 			} else {

					$username = mysql_real_escape_string($_POST['username']);
					$password = mysql_real_escape_string($_POST['password']);
					
					if($username == "" || $password == ""){
					
						echo "Attenzione, devi compilare tutti i campi";
						$link = $_GET['link'];
						?>
						<script type="text/javascript">
							function doRedirect() {
								location.href = "http://portableos.heliohost.org/login.php?azione=redirect&link=<?php echo $link; ?>";
							}
							window.setTimeout("doRedirect()", 2000);
						</script>
						<?php
						
					} else {
					
						$password_cript = md5($password);
						
						$recuperadati = mysql_query("SELECT * FROM utenti WHERE username = '$username' AND password = '$password_cript'");
						
						$verificadati = mysql_num_rows($recuperadati);
						
						if($verificadati == 1){
						
							$sessione = mysql_fetch_array($recuperadati);
							$_SESSION['utente'] = $sessione['username'];
							if(isset($_POST['cookie'])) {
								setcookie("portableos", $username, time() +2592000);
							}
							echo "Login effettuato con successo!";
							$link = $_GET['link'];
							?>
                        	
							<script type="text/javascript">
								function doRedirect() {
									location.href = "http://portableos.heliohost.org/<?php echo $link; ?>";
								}
								window.setTimeout("doRedirect()", 2000);
							</script>
							<?php
						
						} else {
						
							echo "Errore, controlla i dati inseriti!";
							$link = $_GET['link'];
							?>
							<script type="text/javascript">
								function doRedirect() {
									location.href = "http://portableos.heliohost.org/login.php?azione=redir&link=<?php echo $link; ?>";
								}
								window.setTimeout("doRedirect()", 2000);
							</script>
							<?php
						
						}
					
					}
				
				}
			
			}
		
		
		
		?>
	
	
	</div>
	
</body>
</html>

12 Risposte

  • Re: Problema con cookie e session

    Ciao è da uno po' che non maneggio php e non mi manca.
    Prova a bufferizzare l'output includendo tutto il tuo codice tra queste due istruzioni:
    
    <?php
         //avvio del buffering
         ob_start();
    
         //qui ci metti il tuo codice
    
         //flush del buffer
         ob_end_flush();
    ?>
    
  • Re: Problema con cookie e session

    Niente da fare, sempre lo stesso errore con il cookie:

    Warning: Cannot modify header information - headers already sent by (output started at /home/portable/public_html/login.php:17) in /home/portable/public_html/login.php on line 88

    penso che rinuncierò. Però almeno devo riuscire a visualizzare il messaggio di benvenuto basandomi sulla sessione. Come posso risolvere?
  • Re: Problema con cookie e session

    Non mollare sarà sicuramente una stupidaggine.
    ho riguardato le righe quello che hai scritto:
    intanto metti: session_start(); assolutamente come prima riga dello script magari con config.php o la funzione di connessione stai inviando dell'output
  • Re: Problema con cookie e session

    Ecco il contenuto di config.php:
    
    <?php 
    
    	function connect(){
    	
    		mysql_connect("localhost", "portable_root", "password");
    		mysql_select_db("portable_sito");
    	
    	}
    
    
    ?>
    
  • Re: Problema con cookie e session

    Prova quanto ti ho detto riguardo session_start
  • Re: Problema con cookie e session

    L'ho gia inserito nella riga 4, lo devo spostare in un altro punto?
  • Re: Problema con cookie e session

    <?php
       include 'config.php';
       connect();
    session_start();
    ?>

    prova a cambiarlo in
    
    <?php
    session_start();
       include 'config.php';
       connect();
    ?>
    e accertati che prima di <?php non vi siano spazi vuoti
  • Re: Problema con cookie e session

    Niente da fare, continua a dare errore. C'è qualche speranza?
  • Re: Problema con cookie e session

    Dai su non ti abbattere
    ho provato il codice che hai postato con sessione_start messo all'inizio e non mi da l'errore sugli header.
    Se loeseguo mi scrive:
    "Benvenuto su Portable OS, visitatore. Fai click qui per fare il login."

    ovviamente fallisce la connessione al db visto che non c'è l'ho ma non mi segnala errori.

    Ho guardato il mio php.ini e la visualizzazione errori è impostata cosi:
    error_reporting = E_ALL & ~E_NOTICE

    dai una controllata anche a questo
  • Re: Problema con cookie e session

    Ora ti spiego, quando sei un visitatore viene visualizzato quel messaggio, dopo il login viene visualizzato Benvenuto su Portable OS, ripac, ed è lì che si verifica l'errore. Prova sul mio sito
    "http://portableos.heliohost.or"
    entra con questi dati:
    username: prova
    password: prova

    fammi sapere
  • Re: Problema con cookie e session

    Ho provato a fare il login, e mi fa entrare, la notte ha portato consiglio?
  • Re: Problema con cookie e session

    No, niente. Hai controllato il messaggio di errore che compare subito dopo il login (mi sono dimenticato di dirti che dovevi spuntare la casella Ricordami)? E in alto compare uno 0 al posto del messaggio?
Devi accedere o registrarti per scrivere nel forum
12 risposte