2012-04-12 9 views
0

Ich habe für die normalen Sachen wie Leerraum vor den PHP-Tags überprüft, und eine session_start(), aber kann dies nicht für das Leben von mir arbeiten. Ich mache ein Login-System für einen Kunden, also ist dies lebenswichtig.Warum funktioniert meine Sitzungsvariable nicht?

Im Wesentlichen, sobald ich auf die zweite Seite $ _SESSION ['Benutzername']; ist leer. Ich habe es ausgedruckt und es ist leer, aber atm aktiviert die Kopfzeile umleiten, die Sie im Code sehen können.

Vielen Dank im Voraus für jede Hilfe erhalten :)

Relevante Code:?

<?php 
session_start(); 

include '../resources/methods/Library.php'; 

if(isset($_SESSION['username'])) 
{ 
    //User already logged in! 
    header('Location: Index.php'); 
} 

//Username and password submitted by user 
$usernameSubmitted = $_POST['username']; 
$passwordSubmitted = $_POST['password']; 

if($usernameSubmitted != "" && $passwordSubmitted != "") 
{ 
    //User has entered both a username and a password. We shall validate them 

    //Connect to database and select all the admin accounts 
    connectToDB(); 
    $query = "SELECT * FROM admins" or die(mysql_error()); 
    $data = mysql_query($query) or die(mysql_error()); 
    $numberOfAdmins = mysql_num_rows($data) or die(mysql_error()); 


    //Check if the username corresponds to any found in the database       
    $usernameValid = false; 

    for($i = 0; $i < $numberOfAdmins; $i++) 
    { 
     if($usernameSubmitted == mysql_result($data, $i, "Username")) 
     { 
      $userToLogInAs = $i; 
      $usernameValid = true; 
     } 
    } 

    //If username is valid, check password 
    if($usernameValid != false) 
    { 
     //Passwords are held as blowfish encryptions for security. Encypt this so we can compare 
     $encryptedPasswordSubmitted = crypt($passwordSubmitted, '$2a$07$buzzybees5hivestottenhoe$'); 

     if($encryptedPasswordSubmitted == mysql_result($data, $userToLogInAs, "Password")) 
     { 
      //Create a session variable so the user remains logged in 
      $_SESSION['username'] = $usernameSubmitted; 

      //User entered the correct username and password, redirect them to the website. 
      header('Location: Index.php'); 
     } 
    } 

    //If we've got this far then the user didn't authenticate successfully. 
    $message = "<h2>Sorry, Invalid Credentials</h2><p>Check that you're tying your username and password correctly.</p>"; 
} 

>

Und die nächste Seite:

<?php 
session_start(); 

if(!isset($_SESSION['username'])) 
{ 
    //User not signed in, send them to the log in page 
    header('Location: Log-In.php'); 
} 
?> 

Irgendwelche Ideen?

Danke, Danny

+1

was meinst du, es funktioniert nicht? – Michelle

+0

Können Sie uns sagen, warum es nicht funktioniert? Fehlermeldungen? Was passiert, ist unerwartet? –

+0

Solch ein Amateur Fehler, warum nicht enthalten, warum es gebrochen ist, fügte hinzu, dass in. – DanTonyBrown

Antwort

1

Dies ist nur eine Vermutung, aber davon aus, dass Sie nur einen Teil des Codes von Ihrem Anmeldeskript zeigen:

Sie verwenden die() nach der Umleitung auf einer erfolgreichen Anmeldung nicht , also wird jeder Code, der danach kommt und den Sie hier nicht angezeigt haben, ausgeführt. Wenn Sie die Variable $_SESSION dort manipulieren, könnte das Ihr Problem verursachen.

Um sicher zu sein, nur um Ihren Code ändern:

if($encryptedPasswordSubmitted == mysql_result($data, $userToLogInAs, "Password")) 
    { 
     //Create a session variable so the user remains logged in 
     $_SESSION['username'] = $usernameSubmitted; 

     //User entered the correct username and password, redirect them to the website. 
     header('Location: Index.php'); 
     die(); // this is important! 
    } 

und sehen, ob das das Problem löst. Beachten Sie, dass Sie dies überall dort tun müssen, wo Sie umleiten.

+0

Funktioniert immer noch nicht: / – DanTonyBrown