Ich habe ein Token, das ich versuche zu überprüfen, Formular unten Einreichung ist meine Token-Funktionen mit dem Formular, das ich benutze, um zu senden und dann die Formularbehandlung wo das Token überprüft werden sollte. Ich kann die Token-Funktion nicht funktionieren, warum?php token form handhabung
<?php
function getToken()
{
if(!isset($_SESSION['user_token']))
{
$_SESSION['user_token'] = md5(uniqid());
}
}
function checkToken($token)
{
if($token != $_SESSION['user_token'])
{
header('location: 404.php');
exit;
}
}
function getTokenField()
{
return '<input type="hidden" name="token" value="'.$_SESSION['user_token'].'" />';
}
function destroyToken()
{
unset($_SESSION['user_token']);
}
Ein Register mit dem Namen register.php, das auf die Seite registerscript.php umleitet.
<?php getToken(); ?>
<form method="post" action="registerscript.php">
<fieldset>
<legend>Registration Form</legend>
<table width="400" border="0" cellpadding="10" cellspacing="10">
<tr>
<td></td>
<td style="font-weight: bold;color:red">
<?php
if(isset($_SESSION['error']))
{
echo '<p>'.$_SESSION['error']['firstname'].'</p>';
echo '<p>'.$_SESSION['error']['lastname'].'</p>';
echo '<p>'.$_SESSION['error']['username'].'</p>';
echo '<p>'.$_SESSION['error']['email'].'</p>';
echo '<p>'.$_SESSION['error']['password'].'</p>';
echo '<p>'.$_SESSION['error']['country'].'</p>';
unset($_SESSION['error']);
}
?>
</td>
<tr>
<td style="font-weight: bold"><div align="right"><label for="firstname">First Name</label></div></td>
<td><input name="firstname" type="text" class="input" size="25" required /></td>
</tr> <tr>
<td style="font-weight: bold"><div align="right"><label for="lastname">Last Name</label></div></td>
<td><input name="lastname" type="text" class="input" size="25" required /></td>
</tr> <tr>
<td style="font-weight: bold"><div align="right"><label for="username">User Name</label></div></td>
<td><input name="username" type="text" class="input" size="25" required /></td>
</tr>
<tr>
<td style="font-weight: bold"><div align="right"><label for="password">Password</label></div></td>
<td><input name="password" type="password" class="input" size="25" required /></td>
</tr>
<tr>
<td style="font-weight: bold"><div align="right"><label for="confirmpw">Confirm Password</label></div></td>
<td><input name="confirmpw" type="password" class="input" size="25" required /></td>
</tr>
<tr>
<td style="font-weight: bold"><div align="right"><label for="email">Email</label></div></td>
<td><input name="email" type="email" class="input" size="25" required /></td>
</tr>
<tr>
<td style="font-weight: bold"><div align="right"><label for="country">Country</label></td>
<td><select name="country">
<option selected value="0">Select Country</option>
<?php
while ($rowCerts = $resultcategories->fetch_assoc()) {
echo "<option value=\"{$rowCerts['country']}\">";
echo $rowCerts['country'];
echo "</option>";
}
?>
</select></td>
</tr>
<tr>
<td height="23"></td>
<td><div align="right">
<input type="submit" name="submit" value="Register!" />
<?php echo getTokenField(); ?>
Auf dem Formular einreichen Umgang ich will es das Token überprüfen gilt, mit dem folgenden Code, aber es bringt mich zum 404.php, als gäbe es keinen Token ist, aber wenn ich die Seite Quelle sehen ist ein Token.
<?php
session_start();
include_once('conn.php');
if(isset($_POST['submit']))
{
checkToken($token);
$firstname = $_POST["firstname"];
$lastname = $_POST["lastname"];
$username = $_POST["username"];
$password = $_POST["password"];
$confirmpw = $_POST["confirmpw"];
$country = $_POST["country"];
if(preg_match("/[^a-zA-Z0-9]+/", $firstname))
{
$_SESSION['error']['firstname'] = "Incorrect characters used in Firstname.<br>";
}
}
Mein Quelltext zeigt:
<input type="submit" name="submit" value="Register!" />
<input type="hidden" name="token" value="f0de3e58dbd6196ac0f964203577abb0" /> </div></td>
</tr>
</table>
</fieldset>
Haben Sie die Sitzung am Anfang Ihrer PHP-Skripte gestartet? –