Session保存在服务器端,在PHP过程中改变Session变量的值后,即保存在服务器端,下次访问这个变量时,得到是新赋的值,所以,可以用一个Session变量记录表单提交的次数,大于1时,就不在处理表单中的数据。
测试代码:<?php /** * 防止刷新 重复提交 * site www.jb200.com */ if (isset($_POST['action']) && $_POST['action'] == 'submitted') { session_start(); isset($_SESSION['submit_time']) or die ("no session"); if ($_SESSION['submit_time']==0){ print '<pre>'; print_r($_POST); print '<a href="'. $_SERVER['PHP_SELF'] .'">Please try again</a>'; print '</pre>'; $_SESSION['submit_time']=1; echo $_SESSION['submit_time']; } else { print '<pre>'; print_r($_POST); echo "However you have submitted"; print '</pre>'; } } else { session_start() or dir("session is not started"); $_SESSION['submit_time']= 0; // isset($_SESSION['submit_time']) or die ("session var is not created"); // echo $_SESSION['submit_time']; ?> <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST"> Name: <input type="text" name="personal[name]"><br> Email: <input type="text" name="personal[email]"><br> Beer: <br> <select multiple name="beer[]"> <option value="warthog">Warthog</option> <option value="guinness">Guinness</option> </select><br> <input type="hidden" name="action" value="submitted"> <input type="submit" name="submit" value="submit me!"> </form> <?php } ?>
上面代码有个缺点:
没有明确销毁Session,失效的Session文件可能仍然保留在服务器文件系统中。
哪位有好的办法,还请分享一下。
您可能感兴趣的文章:
一个php计数器代码(防刷新、防灌水)
php防刷新计数器的代码(session方式)
php防止刷新页面重复提交的代码一例
你了解浏览器的刷新原理吗
php防止恶意刷新 快速刷新的代码
php防止恶意刷新页面的代码