Token,就是令牌,最大的特點(diǎn)就是隨機(jī)性,不可預(yù)測。
Token一般用在兩個地方——防止表單重復(fù)提交、anti csrf攻擊(跨站點(diǎn)請求偽造)。
兩者在原理上都是通過session token
來實(shí)現(xiàn)的。當(dāng)客戶端請求頁面時,服務(wù)器會生成一個隨機(jī)數(shù)Token,并且將Token放置到session當(dāng)中,然后將Token發(fā)給客戶端(一般通過構(gòu)造hidden表單)。下次客戶端提交請求時,Token會隨著表單一起提交到服務(wù)器端。
如果應(yīng)用于“防止表單重復(fù)提交”,服務(wù)器端第一次驗(yàn)證相同過后,會將session中的Token值更新下,若用戶重復(fù)提交,第二次的驗(yàn)證判斷將失敗,因?yàn)橛脩籼峤坏谋韱沃械腡oken沒變,但服務(wù)器端session中Token已經(jīng)改變了。
在線視頻教程分享:php視頻教程
php表單加入Token防止重復(fù)提交
原理在于生成一個隨機(jī)字符串放在session里,提交表單后來驗(yàn)證這個字符串,可以做到防止他人自己寫form來欺騙提交,重復(fù)提交或者雙擊提交。
簡單實(shí)現(xiàn)(僅供參考):
<?php /* * PHP簡單利用token防止表單重復(fù)提交 * 此處理方法純粹是為了給初學(xué)者參考 */ session_start(); function set_token() { $_SESSION['token'] = md5(microtime(true)); } function valid_token() { $return = $_REQUEST['token'] === $_SESSION['token'] ? true : false; set_token(); return $return; } //如果token為空則生成一個token if(!isset($_SESSION['token']) || $_SESSION['token']=='') { set_token(); } if(isset($_POST['test'])){ if(!valid_token()){ echo "token error"; }else{ echo '成功提交,Value:'.$_POST['test']; } } ?> <form method="post" action=""> <input type="hidden" name="token" value="<?php echo $_SESSION['token']?>"> <input type="text" name="test" value="Default"> <input type="submit" value="提交" /> </form>
相關(guān)文章教程推薦:php教程