Gå til innhold

Problem med sessions


Anbefalte innlegg

Hei.

 

Jeg har litt problemer med et login script jeg har skrevet. Scriptet fungerer, og kjører helt fint uten noen feilmeldinger. Men informasjonen som skal bli lagret i sessions, ikke blir lagret av en eller annen grunn. Selve cookien blir laget, men det finnes ikke noe informasjon på den.

 

Jeg finner ikke ut av feilen selv, så jeg håper noen har tid til å se over scriptet mitt, og kanskje finne feilen! Det hadde i så fall vært veldig hyggelig! :)

 

 

<?php
ob_start();
if(isset($_POST['submitted'])) {
require_once('includes/mysql_connect.php');

// Validate the email address
if(!empty($_POST['email'])) {
 $e = escape_data($_POST['email']);
} else {
 echo '<p>You forgot to enter your email address!</p>';
 $e = FALSE;
}

// Check for a password
if(!empty($_POST['pass'])) {
 $p = escape_data($_POST['pass']);
} else {
 echo '<p>You forgot to enter a password!</p>';
 $p = FALSE;
}

if($e && $p) { // Data tests validated as OK

 // Get information about the user
 $query = "SELECT user_id, user_name, active FROM users WHERE email='$e' AND pass=SHA('$p')";
 $result = mysql_query($query);
 $row = mysql_fetch_array($result, MYSQL_NUM);
 
 if($row) { // Match found
 	// Check access level
 	if($row[2] == 'admin') {
   $level = 'admin';
 	} elseif($row[2] == 'member') {
   $level = 'member';
 	} else {
   $level = FALSE;
 	}
 	
 	if($level) { // Acount activated
 	
   // Set the session data and redirect
   session_set_cookie_params(3600, '/', '');
   session_name('YourUserID');
   session_start();
   $_SESSION['user_id'] = $row[0];
   $_SESSION['user_name'] = $row[1];
   $_SESSION['level'] = $level;
   ob_end_clean();
   mysql_close();
   
   // Redirect the user
   $url = 'http://' . $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']);
   // Check for a trailing slash.
   if((substr($url, -1) == '/') OR (substr($url, -1) == '\\') ) {
   	$url = substr ($url, 0, -1); // Chop off the slash.
   }
   
   // Add the page.
   $url .= '/index.php';
   header("Location: $url");
   exit(); // Quit the script.
   
 	} else { // Account not activated yet
   echo '<p>Your account is not activated yet. Please recheck your email, or contact the system administrator.</p>';
 	}
 	
 } else { // Email and password did not match
 	echo '<p>The entered email and password combination did not match. Please try again.</p>';
 }
 
} else { // One of the data tests failed
 echo '<p>Please try again.</p>';
}

} // End of main submit conditional
?>

 

Takk!

Lenke til kommentar
Videoannonse
Annonse

Takk for svar, men det har ikke noe å si. Scriptet sender ikke noe til browseren før session_start(). Ville dessuten også fått en feilmelding da.

 

Men uansett prøvde jeg som du sa, og det gjorde ingen forskjell. Cookien blir lagret, men finnes ikke noe informasjon som jeg kan hente ut ifra den.

Lenke til kommentar

kan være greit å legge inn litt debug tekst. F.eks slik

 

PHP
<?php

session_start();

echo "Row:<br /><pre>";

print_r($row);

echo "</pre>";

   $_SESSION['user_id'] = $row[0];

   $_SESSION['user_name'] = $row[1];

   $_SESSION['level'] = $level;

echo "Session:<br /><pre>";

print_r($_SESSION);

echo "</pre>";

   ob_end_clean();

?>

Da skal du få ut en grei oversikt over innholdet i $row og $_SESSION for å dobbeltsjekke den informasjonen du forventer at skal være der er der.

 

Litt på siden, ett alternativ til dette

$row = mysql_fetch_array($result, MYSQL_NUM);

er

$row = mysql_fetch_row($result);

litt mindre å skrive ;)

 

--

session_start(); skal vaere helt overst i alle filene som bruker sessions.

Ikke nødvendig når man benytter output buffering som blir benyttet her. (Hvis jeg ikke har totalt missforstått).

http://www.hudzilla.org/phpwiki/index.php?...utput_buffering

Endret av crowly
Lenke til kommentar

Takk for tipsene, crowly! :)

Og du har helt rett når det gjelder output buffering.

 

Fant ut av feilen selv nå nettopp. Ble noe krøll siden jeg hadde på en eller annen måte fått til å lage to sessions når jeg trykket på login linken. Siden da en session allerede var laget med samme navn, ville ikke scriptet mitt lage en ny en. Men det er løst nå!

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...