2010-12-02 5 views
0

Dans ma forme, j'ai un jeton qui est enregistré dans une session et doit être présent lorsque le formulaire est soumis:Re-issueing un jeton

$token = hash('sha256', rand() . microtime() . $_SERVER['REMOTE_ADDR']) // rand as possible 
$_SERVER['token'] = $token; 

maintenant sous la forme que j'ai une valeur cachée:

<input type="hidden" name="token" value="<?php echo $token;?>"> 

Lorsque ce formulaire, je soumettais je vérifier si elle correspond au jeton de la session:

if ($_POST['token'] !== $_SESSION['token']) 
{ 
// show error here 
} 
else 
{ 
//carry on normally 
} 

Cependant, ce que ha ppens si l'utilisateur remplit incorrectement le formulaire? Je ne peux plus changer le jeton dans la session car la sortie a déjà été envoyée. Que suggérez-vous?

Répondre

0

Je suggère de ne pas envoyer de sortie tant que vous n'êtes pas prêt avec vos en-têtes, sessions et ainsi de suite. Vous pouvez produire votre sortie à la fin de la requête, ou (si la première solution n'est pas possible) consultez le manuel "bufferisation de sortie".

0

Vous pouvez modifier des éléments de la session même si la sortie a été envoyée. Vous ne pouvez pas commencer la session après que le contenu a été envoyé, mais une fois que vous avez envoyé les en-têtes de session (ce qui devrait être l'une des premières choses que vous faites), vous pouvez modifier les données de la session à tout moment. .