원하는 작업입니다.양식 제출이 포함 된 고유 토큰이 작동하지 않는 것 같습니다.
사용자가 고유 토큰을 사용하여 양식을 두 번 제출하지 못하도록합니다. 여기에 올바른 코드가 있다고 생각하지만 여전히 작동하지 않습니다. 양식을 처음 제출할 때 출력은 "두 번 보내지 마십시오"입니다. 내가 도대체 뭘 잘못하고있는 겁니까?
<?php session_start(); ?>
<html>
<body>
<?php
$_SESSION['token'] = md5(session_id() . time());
?>
<?php
if (isset($_SESSION['token']))
{
if (isset($_POST['token']))
{
if ($_POST['token'] != $_SESSION['token'])
{
echo "Don't send twice!";
}
}
}
else {
echo "Thank you for submitting";
}
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<input type="hidden" name="token" value="<?php echo $_SESSION['token'] ?>" />
<input type="text" name="bar" />
<input type="submit" value="Save" />
</form>
if(isset($_SESSION['token']))
에 대한 조건이 항상 충족되기 때문에
Thank you for submitting
당신이 토큰을 생성하고이 바로 위에 세션 변수를 설정하기 때문에 절하면 ... 그것도이다, 표시되지 않습니다
는
모든 페이지가로드 될 때마다 $ _SESSION [ 'token']을 새로 작성하므로 "time()"값이 계속 변경됩니다. 따라서 조건이 항상 충족됩니다. – rlanvin
양식 재 제출을 방지하기 위해 양식을 제출 한 후 동일한 페이지로 리디렉션 –
@ Rémi 토큰을 변경했습니다 ... $ _SESSION [ 'token'] = md5 (uniqid()); ...하지만 여전히 똑같은 문제가 있는데 처음 제출할 때 "두 번 보내지 마라."라고 말합니다. 몇 가지 코드 예제를 보여줄 수 있습니까? – user1009453