3 votes

PHP : Doit se connecter deux fois jusqu'à ce que les variables de session soient définies

SOLUTION : Après de nombreuses heures de recherche, il semble que ce problème se produisait lorsque j'accédais à mon site web sans ajouter le "www." avant le domaine. Donc ce qui se passait réellement, c'est que je me connectais avec example.com/login.php qui établit une session quelque part, que mon contrôle des membres ne reconnaît pas, donc il me redirige vers www.example.com/login.php, que lorsque je me connecte tout fonctionne Ok.

Lorsque je me connecte à partir de www.example.com/login.php (avec le www.), il se connecte correctement dès la première tentative.

J'ai donc ajouté un code pour m'assurer que j'ai toujours le www dans l'URL :

if ($_SERVER['HTTP_HOST'] == "example.com")
{
   $url = "http://www." . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
   header("Location: $url");
} 

et tout fonctionne bien maintenant. J'espère que cela aidera quelqu'un.


Donc, j'ai construit plus de 3 sites Web, et tous ont le même problème, je ne sais pas pourquoi, je dois me connecter deux fois jusqu'à ce que je sois vraiment connecté... (jusqu'à ce que les variables de session soient définies). L'aide est vraiment appréciée, j'essaie de résoudre ce problème et je cherche une solution depuis longtemps...

    session_start();
if ((isset($_SESSION['UserName']))&&(isset($_SESSION['LastActivity'])))
{
   header ('Location: http://www.example.com/Account.php');
}

if (isset($_POST['username']))
{
    mysql_connect("localhost","DBuser","pass") or 
    die ("could not connect to mysql");
    mysql_select_db("DBNAME") or die ("no database");

    $inputUserName = $_POST['username'];
    $inputPass = $_POST['password'];

    $datausername = mysql_real_escape_string($inputUserName);
    $password=md5($inputPass);

    $sqlCommand = "SELECT * FROM Members 
    WHERE UserName='$datausername' AND 
    Password='$password'";

    $result = mysql_query($sqlCommand);

    if (mysql_num_rows($result) > 0)
    {
       $_SESSION['UserName'] = $datausername;

       $_SESSION['LastActivity']= time();
       sleep(2);
       $LoginDate = date('Y-m-d H:i:s');

       mysql_connect("localhost","DBUPDATEusername","DBuserPass") or 
    die ("could not connect to mysql");
    mysql_select_db("databaseName") or die ("no database");   

       mysql_query("Update Members SET LastLogin='$LoginDate' WHERE 
            UserName='$datausername'");

       mysql_close(); 
       echo '<meta http-equiv="Refresh" content="0;url=http://www.example.com/Account.php?p=Login_Success"/>';
    }
    else {
        mysql_close();
        echo '<div id="error_msg">Error: Information entered are not correct. Please check and try again.</div>';}
    }

}
?>
<form...

formulaire de connexion (avec action=""), et méthode post).

Note : J'utilise la balise html refresh, parce que je ne peux pas utiliser la redirection de l'en-tête (j'obtiens l'erreur que l'en-tête est déjà envoyé).

et dans le fichier example.com/Account.php je fais cette vérification en haut du code :

  session_start();
if ((!isset($_SESSION['UserName']))||(!isset($_SESSION['LastActivity'])))
{
    header('Location: http://www.example.com/?p=Must_Login');
}

Et il semble que la première fois que je me connecte et suis redirigé vers le panneau account.php.. les valeurs de session ne sont pas définies, et me redirige vers la page Must_Login. Je me connecte à nouveau (même page de connexion que la première fois). Mais la deuxième fois que je me connecte, les valeurs de session sont définies et tout est OK.

Merci beaucoup d'avance pour votre aide !

0voto

user2915507 Points 15

Essayez session_set_cookie_params(0, '/', '.domain.com') avant votre session_start() ;

0voto

JaytheHam Points 1

J'ai eu exactement le même problème, dans mon cas, j'étais redirigé vers l'adresse du site web après la connexion :

header('Location: http://mywebsite.com');
die();

Même la fermeture manuelle de la session avant la redirection n'a pas aidé.

Je l'ai corrigé en redirigeant plutôt vers une page spécifique :

header('Location: index.php');
die();

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X