2012-08-15 2 views
1

Je dois être capable de stocker le mot de passe soumis dans une session, comme actuellement en utilisant la méthode php_self la page est simplement rechargée comme si l'utilisateur n'avait pas entré le mot de passe correctement (ceci se passe dans Firefox, il fonctionne très bien avec aucune session dans Chrome/Safari) et donc je crois qu'une session est nécessaire pour qu'il fonctionne dans FF, mais je suis nouveau à PHP et je ne sais pas comment je peux y arriver, voici le code:créer une session pour un simple mot de passe php

Merci à l'avance

<?php 
session_start(); 

$Password = 'hello'; 

    if (isset($_POST['submit_pwd'])){ 
     $pass = isset($_POST['passwd']) ? $_POST['passwd'] : ''; 


     if ($pass != $Password) { 
     showForm("error", "WRONG PASSWORD"); 
     exit();  
     } 
    } else { 
     showForm(); 
     exit(); 
    } 

function showForm($Inputclass="mister", $Placeholder="PLEASE ENTER PASSWORD"){ 

?> 

HTML:

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" name="pwd" id="pwd"> 


<input class="<?php echo $Inputclass; ?>" name="passwd" type="password" size="79" style="margin-left: -100px;" placeholder="<?php echo $Placeholder; ?>"/> 
     <br/> 
      <input class="text" name="submit_pwd" value="Login" type="image" src="loginkey.png" style="position: relative; left: 240px; top: -35px;"> 

     </form> 
+0

Et vous êtes sûr que ce est le moyen le plus sûr que vous pouvez imaginer? – Sgarz

+0

Le code côté serveur est indépendant du navigateur. Si cela fonctionne dans Chrome et non Firefox, votre problème n'est pas avec PHP. – wanovak

+0

Je suis conscient que je devrais utiliser des hachages, sels, etc - c'est un projet très simple, donc j'ai juste besoin d'un mot de passe de base, mais j'ai besoin pour travailler à travers les navigateurs – Rockafella

Répondre

1

Si vous appuyez sur le bouton, puis $ _POST [ 'submit_pwd_x'] et $ _POST [ 'submit_pwd_y'] doit être réglé, pas $ _POST [ 'submit_pwd']

Si vous appuyez sur "Entrée" puis $ _POST ['submit_pwd'], $ _POST ['submit_pwd_x'] ou $ _POST ['submit_pwd_y'] NE DOIT PAS être défini - mais dépend parfois du navigateur.

Vous ne pouvez pas compter sur une ou l'autre, de sorte que votre chèque si (isset ($ _ POST [ « submit_pwd »])) sera peu fiable

L'astuce est d'ajouter un champ caché sous la forme, et vérifier sbmission de ce champ caché dans $ _POST.


Plus de détails sur la réponse (basé sur un commentaire):

PHP est

if (isset($_POST['formsubmitted'])){ 
    .... 
} 

HTML est

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" name="pwd" id="pwd"> 
    <input class="<?php echo $Inputclass; ?>" name="passwd" type="password" size="79" style="margin-left: -100px;" placeholder="<?php echo $Placeholder; ?>"/> 
    <br/> 
    <input type="hidden" name="formsubmitted" value="1" /> 
    <input class="text" name="submit_pwd" value="Login" type="image" src="loginkey.png" style="position: relative; left: 240px; top: -35px;"> 

</form> 

Edit:

Si vous ne cliquez pas sur le bouton (appuyez sur Entrée):

  • IE envoie aucun
  • FF, Opera enverra le submit_pwd_x = 0 et submit_pwd_y = 0
  • Chrome, Safari envoyer la submit_pwd_x = 0, submit_pwd_y = 0 et submit_pwd

Si vous cliquez sur le bouton:

  • IE envoie su bmit_pwd_x = X et submit_pwd_y = Y
  • FF, Opera envoie submit_pwd_x = X et submit_pwd_y = Y
  • Chrome, Safari envoie le submit_pwd_x = X, submit_pwd_y = Y et submit_pwd
+0

Merci Robbie - que tout a un sens. Donc, j'ai besoin de FF pour soumettre les trois, ou vous dites que ce n'est pas possible et que ce script ne fonctionnera tout simplement pas? – Rockafella

+0

Ajout d'un exemple plus clair dans l'asnwer. – Robbie

+0

Merci Robbie - J'ai changé pour utiliser

Questions connexes