【发布时间】:2016-12-11 06:02:30
【问题描述】:
我想生成一个随机密钥供用户在注册期间使用。该代码将生成的密钥与用户输入进行比较,但是当用户提交表单时,密钥会重新生成,因此它们永远不会相同。我试图通过检查它是否已经生成但它不起作用来保护生成器功能。然后,我也尝试使用会话,这也不起作用。这是总是产生“失败”而不是“成功”的代码:
编辑:我根据你的 cmets 做了一些更正。
<?php
session_start();
$_SESSION['key'] = randomKey();
$key1 = $_SESSION['key'];
error_reporting(E_ALL);
ini_set('display_errors', 1);
function randomKey() {
if (empty($_SESSION['key'])) {
$key = uniqid();
$_SESSION['key'] = $key;
return $key;
} else {
return $_SESSION['key'];
}
}
if(isset($_POST['submit']))
{
$input = $_POST['inputKey'];
if (strcmp($input,$_SESSION['key']) == 0) {
echo 'success';
} else {
echo 'fail';
}
}
?>
<html>
<head>
</head>
<body>
<form method="POST" action="">
<table border="0">
<tr>
<td>Your key:</td>
<td>
<b>
<?php echo $key1; ?></b>
</td>
</tr>
<tr>
<td>Enter your key:</td><td><input type="text" name="inputKey"></td>
</tr>
<tr>
<td><input id="button" type="submit" name="submit" value="Sign-Up"></td>
</tr>
</table>
</form>
</body>
</html>
【问题讨论】:
-
除非你将 $key 传递给你的函数,否则它总是为空的,所以你总是会得到一个新的。阅读此php.net/manual/en/language.variables.scope.php
-
$_session -> $_SESSSION
-
@rjdown 但他正在使用全局会话
-
在发送stackoverflow.com/questions/9707693/…的标头上阅读此内容
标签: php forms session random generated