2010-06-11 3 views
0

J'utilise le code ci-dessous pour une connexion utilisateur. La première fois que j'essaie de me connecter après la mise en cache/les cookies, etc. ont été effacés, le navigateur se rafraîchit et le nom d'utilisateur n'est pas connecté. Ensuite, la connexion fonctionne correctement.L'ouverture d'une session de connexion après la mise en cache, les cookies, etc. a été effacée

Une idée de comment je peux le faire fonctionner la première fois?

Merci à l'avance,

John

index.php:

<?php 


     if($_SERVER['REQUEST_METHOD'] == "POST"){header('Location: http://www...com/.../index.php?username='.$username.'&password='.$password.'');} 



     require_once "header.php"; 
     include "login.php"; 
     require_once "footer.php"; 

     ?> 

login.php:

<?php 
if (!isLoggedIn()) 
{ 
    if (isset($_POST['cmdlogin'])) 
    { 
     if (checkLogin($_POST['username'], $_POST['password'])) 
     { 
      show_userbox(); 


     } else 
     { 
      echo "Incorrect Login information !"; 
      show_loginform(); 
     } 
    } else 
    { 

     show_loginform(); 
    } 

} else 
{ 

    show_userbox(); 


} 



?> 

fonction show_loginform:

function show_loginform($disabled = false) 
{ 

    echo '<form name="login-form" id="login-form" method="post" action="./index.php?'.$_SERVER['QUERY_STRING'].'"> 

    <div class="usernameformtext"><label title="Username">Username: </label></div> 
    <div class="usernameformfield"><input tabindex="1" accesskey="u" name="username" type="text" maxlength="30" id="username" /></div> 


    <div class="passwordformtext"><label title="Password">Password: </label></div> 
    <div class="passwordformfield"><input tabindex="2" accesskey="p" name="password" type="password" maxlength="15" id="password" /></div> 


    <div class="registertext"><a href="http://www...com/.../register.php" title="Register">Register</a></div> 
    <div class="lostpasswordtext"><a href="http://www...com/.../lostpassword.php" title="Lost Password">Lost password?</a></div> 

    <p class="loginbutton"><input tabindex="3" accesskey="l" type="submit" name="cmdlogin" value="Login" '; 
    if ($disabled == true) 
    { 
     echo 'disabled="disabled"'; 
    } 
    echo ' /></p></form>'; 


} 

EDIT: header.php comprend ceci:

session_start(); 

Cela signifie-t j'utilise des sessions?

EDIT: par la demande de webbiedave, voici le chèque d'informations d'identification de connexion des fonctions que je utilise:

<?php 

#### Login Functions ##### 


function isLoggedIn() 
{ 

    if (session_is_registered('loginid') && session_is_registered('username')) 
    { 
     return true; // the user is loged in 
    } else 
    { 
     return false; // not logged in 
    } 

    return false; 

} 

function checkLogin($u, $p) 
{ 
global $seed; // global because $seed is declared in the header.php file 

    if (!valid_username($u) || !valid_password($p) || !user_exists($u)) 
    { 
     return false; // the name was not valid, or the password, or the username did not exist 
    } 

    //Now let us look for the user in the database. 
    $query = sprintf(" 
     SELECT loginid 
     FROM login 
     WHERE 
     username = '%s' AND password = '%s' 
     AND disabled = 0 AND activated = 1 
     LIMIT 1;", mysql_real_escape_string($u), mysql_real_escape_string(sha1($p . $seed))); 
    $result = mysql_query($query); 
    // If the database returns a 0 as result we know the login information is incorrect. 
    // If the database returns a 1 as result we know the login was correct and we proceed. 
    // If the database returns a result > 1 there are multple users 
    // with the same username and password, so the login will fail. 
    if (mysql_num_rows($result) != 1) 
    { 
     return false; 
    } else 
    { 
     // Login was successfull 
     $row = mysql_fetch_array($result); 
     // Save the user ID for use later 
     $_SESSION['loginid'] = $row['loginid']; 
     // Save the username for use later 
     $_SESSION['username'] = $u; 
     // Now we show the userbox 
     return true; 
    } 
    return false; 
} 

?> 
+0

Pouvez-vous inclure la fonction qui exécute réellement les pouvoirs et vérifier que définit la session/cookie? – webbiedave

+0

Où commence votre session? – Babiker

+0

Salut webbiedave, j'ai inclus les fonctions de vérification des informations d'identification. session_start(); est dans header.php, qui est inclus dans index.php – John

Répondre

0

La ligne qui est à l'origine de votre page à rafraîchir est

if($_SERVER['REQUEST_METHOD'] == "POST"){header('Location: http://www...com/.../index.php?username='.$username.'&password='.$password.'');} 

Qu'est-ce qui fait , c'est lorsque vous postez sur la page, il vous redirige vers la page d'index avec le nom d'utilisateur et mot de passe dans l'URL.

So does that mean I'm using Sessions?

Oui, vous utilisez des sessions. C'est ainsi que vous sauvegardez votre état de connexion de page en page.

Toutefois, pour répondre à la question, supprimez la ligne que j'ai mentionnée au début de l'article. Je ne peux pas voir où cela vous fait du bien. Il déplace simplement les valeurs du tableau $_POST vers le tableau $_GET, puis vous continuez à regarder dans le tableau $_POST.

Edit:

changement index.php à ce qui suit:

<?php 
if($_SERVER['REQUEST_METHOD'] == "POST"){ 
    if (checkLogin($_POST['username'], $_POST['password'])) { 
     header('Location: http://www...com/.../index.php'); 
    } 
} 
require_once "header.php"; 
include "login.php"; 
require_once "footer.php"; 
?> 
+0

La raison pour laquelle je le souhaite est que la fenêtre de confirmation ne s'affiche pas lorsque l'utilisateur actualise le navigateur. – John

+0

ok. Puis confirmez votre connexion avant cette ligne. Ensuite, vous n'avez rien à passer via l'URL. N'imprimez rien à l'écran si vous redirigez toujours en utilisant l'en-tête (redirection uniquement si la connexion est réussie). – Joseph

+0

D'accord ... cela semble être une idée prometteuse. Est-il possible de mettre une redirection comme ça dans une fonction? – John

Questions connexes