當程序員的人應該都去過論壇,都在應該注冊過論壇的用戶吧.論壇上用戶注冊的步驟分為幾部:
第一步 協議頁面, 只有同意這個協議才可以進入下一步注冊
第二步 表單輸入頁面, 輸入用戶的注冊信息
第三步 注冊結果頁面,提示注冊成功
在實際工作中,假如我們要開發實現這種注冊頁面,要注重很多的問題:
1用戶跳過"第一步",沒有閱讀協議頁面,直接通過第二步的url直接訪問表單輸入頁面.
2用戶在完成"第三步"的時候,不停的刷新頁面,這個用戶輸入的信息就在每刷新一次的時候被重新保存一次
3用戶在完成"第三步"的時候,點擊後退,修改某個信息後,再次提交.
類似這種得表單在web開發的過程中會經常碰到, 對於第3點, 幾乎目前所有的論壇中都有這個問題存在,;第2點在一些留言板中經常碰到, 但是怎麼作才可以避免上述的問題呢?
今天老板讓我幫別人做個文件上傳的東西, 答應任何人來上傳符合要求文件, 頁面模板已經設計好了, 就是和用戶注冊的步驟是一樣的, 分三步驟. 以前做過類似的東西, 但是防刷新機制設計的不是很好. 反正今天沒事做, 就稍微研究一下, 看看如何實現代碼可以避免上述的問題.
-----------------------------------------------
-----------------------------------------------
下面是個人設計的實現代碼,可以避免上述的問題. 通過浏覽器訪問register.php,在輸入"用戶名"和"地址"的時候, 兩個都不能為空,為空的時候,會提示錯誤信息; 當兩個輸入框都不為空的時候, 可以提交成功,提交成功以後,你再進行刷新和後退,看看是不是達到了效果了.
文件一: config.inc.php
<?php
//開始session
session_start();
//設置不進行本地緩存
header('Expires: '.date('D,d M Y H:i:s',mktime(0,0,0,1,1,2000)).' GMT');
header('Last-Modified:'.gmdate('D,d M Y H:i:s').' GMT');
header('Cache-control: private, no-cache,must-revalidate');
header('Pragma: no-cache');
?>
文件二: register.php
<?php
require_once "config.inc.php";
if(isset($_SESSION[step2]) && isset($_POST[step2])) {
//注冊的最後一步
$errorStr = formStep3();
if($errorStr!=null){
require_once('step2.html');
}else{
require_once('step3.html');
unset($_SESSION[step2], $_SESSION[step1]);
}
} else if(isset($_SESSION[step1]) && isset($_GET[step1])) {
//注冊的第二步
require_once('step2.html');
$_SESSION[step2] = 1;
} else {