《PHP實(shí)例:ThinkPHP中的create方法與自動(dòng)令牌驗(yàn)證實(shí)例教程》要點(diǎn):
本文介紹了PHP實(shí)例:ThinkPHP中的create方法與自動(dòng)令牌驗(yàn)證實(shí)例教程,希望對(duì)您有用。如果有疑問(wèn),可以聯(lián)系我們。
本文實(shí)例形式展示了ThinkPHP中的create辦法與自動(dòng)令牌驗(yàn)證的實(shí)現(xiàn)辦法,具體步驟如下:PHP實(shí)例
一、數(shù)據(jù)表結(jié)構(gòu)PHP實(shí)例
user表結(jié)構(gòu)如下:PHP實(shí)例
id username passwordPHP實(shí)例
二、view模板部分PHP實(shí)例
\aoli\Home\Tpl\default\User\create.html頁(yè)面如下:PHP實(shí)例
<form action="__URL__/addit" method="post"> <input type="text" name="id" /> <input type="text" name="username" /> <input type="password" name="password" /> <input type="submit" name="sub" value="提交" /> </form>
三、action部分:PHP實(shí)例
\aoli\Home\Lib\Action.php頁(yè)面如下:PHP實(shí)例
<?php class UserAction extends Action { function create(){ $this->display(); } function addit(){ //向表user中添加表單內(nèi)容 $user=M('user'); $user->create(); $user->add(); //判斷是否存在令牌驗(yàn)證 if(!$user->autoCheckToken($_POST)){ dump('no'); }else{ dump('yes'); } } ?>
1、在對(duì)表單提交過(guò)來(lái)的數(shù)據(jù)進(jìn)行操作之前,我們往往需要手動(dòng)創(chuàng)建需要的數(shù)據(jù),例如上面提交的表單數(shù)據(jù):
PHP實(shí)例
//實(shí)例化User模型 $user=M('user'); //獲取表單的POST數(shù)據(jù) $data['username']=$_POST['username'] $data['password']=$_POST['password'] //寫(xiě)入到數(shù)據(jù)庫(kù) $user->data($data)->add();
? 附:使用data辦法創(chuàng)建的數(shù)據(jù)對(duì)象不會(huì)進(jìn)行自動(dòng)驗(yàn)證和過(guò)濾操作,需要自行處理,如果只是想簡(jiǎn)單創(chuàng)建一個(gè)數(shù)據(jù)對(duì)象,并且不需要完成一些額外的功能的話,可以使用data辦法簡(jiǎn)單的創(chuàng)建數(shù)據(jù)對(duì)象.PHP實(shí)例
2、ThinkPHP可以幫助我們快速地創(chuàng)建數(shù)據(jù)對(duì)象,最典型的應(yīng)用就是自動(dòng)根據(jù)表單數(shù)據(jù)創(chuàng)建數(shù)據(jù)對(duì)象.create辦法創(chuàng)建的數(shù)據(jù)對(duì)象是保存在內(nèi)存中的,并沒(méi)有實(shí)際的寫(xiě)入到數(shù)據(jù)庫(kù)中.PHP實(shí)例
//實(shí)例化user模型 $user=M('user'); //根據(jù)表單提交的POST數(shù)據(jù)創(chuàng)建數(shù)據(jù)對(duì)象,并保存在內(nèi)存中,可以通過(guò)dump($user)查看 $user=create(); //把創(chuàng)建的數(shù)據(jù)對(duì)象寫(xiě)入數(shù)據(jù)庫(kù)中 $user->add();
3、create辦法支持從其它方式創(chuàng)建數(shù)據(jù)對(duì)象,如,從其它的數(shù)據(jù)對(duì)象或者數(shù)組等.PHP實(shí)例
$data['name']='ThinkPHP'; $data['eamil']='ThinkPHP@gmail.com'; $user->create($data); 甚至還可以支持從對(duì)象創(chuàng)建新的數(shù)據(jù)對(duì)象,如從user數(shù)據(jù)對(duì)象創(chuàng)建新的member數(shù)據(jù)對(duì)象 $user=M('user'); $user->find(1); $member=M('member'); $member->create($user);
4、create辦法在創(chuàng)建數(shù)據(jù)對(duì)象的同時(shí),還完成了一些很有意義的工作,包括令牌驗(yàn)證、數(shù)據(jù)自動(dòng)驗(yàn)證、字段類型查找,數(shù)據(jù)自動(dòng)完成等.
??
因些,我們熟悉的令牌驗(yàn)證、自動(dòng)驗(yàn)證和自動(dòng)完成功能,其實(shí)都必須通過(guò)create辦法才能生效.PHP實(shí)例
5、令牌驗(yàn)證:
??
功能:可以有效防止表單的遠(yuǎn)程提交等平安防護(hù).PHP實(shí)例
?? config.php中添加如下配置:PHP實(shí)例
'TOKEN_ON' => true, //是否開(kāi)啟令牌驗(yàn)證 'TOKEN_NAME' => 'token',// 令牌驗(yàn)證的表單暗藏字段名稱 'TOKEN_TYPE' => 'md5',//令牌驗(yàn)證哈希規(guī)則
自動(dòng)令牌會(huì)向當(dāng)前SESSION會(huì)話當(dāng)中放上一個(gè)md5加密的字符串.并將這個(gè)字符串以暗藏域的形式插入到表單的form之前.這個(gè)字符串出現(xiàn)在兩個(gè)地方,一個(gè)是在SESSION當(dāng)中,另一個(gè)就是在表單當(dāng)中.當(dāng)你提交表單后,服務(wù)器第一件事就是對(duì)比這個(gè)SESSION信息,如果正確的話,準(zhǔn)許表單提交,否則不允許提交.PHP實(shí)例
查看create.html的的源代碼會(huì)看到在表單form的結(jié)束標(biāo)志之前會(huì)多了一個(gè)自動(dòng)生成的暗藏域
PHP實(shí)例
<input type="hidden" name="token" value="eef419c3d14c9c93caa7627eedaba4a5" />
(1)、如果希望自己控制暗藏域的位置,可以手動(dòng)在表單頁(yè)面添加 {__TOKEN__} 標(biāo)識(shí),系統(tǒng)會(huì)在輸出模板的時(shí)候自動(dòng)替換.PHP實(shí)例
(2)、如果在開(kāi)啟表單令牌驗(yàn)證的情況下,個(gè)別表單不需要使用令牌驗(yàn)證
功能,可以在表單頁(yè)面添加 {__NOTOKEN__} ,則系統(tǒng)會(huì)忽略當(dāng)前表單的令牌驗(yàn)證.PHP實(shí)例
(3)、如果頁(yè)面中存在多個(gè)表單,建議添加 {__TOKEN__} 標(biāo)識(shí),并確保只有一個(gè)表單需要令牌驗(yàn)證.PHP實(shí)例
(4)、如果使用create辦法創(chuàng)建數(shù)據(jù)對(duì)象的話,會(huì)同時(shí)自動(dòng)進(jìn)行表單驗(yàn)證,如果沒(méi)有使用該辦法的話,則需要手動(dòng)調(diào)用模型的autoCheckToken辦法進(jìn)行表單驗(yàn)證.
PHP實(shí)例
if (!$User->autoCheckToken($_POST)){ // 令牌驗(yàn)證錯(cuò)誤 }
希望本文所示實(shí)例對(duì)大家的ThinkPHP程序設(shè)計(jì)有所贊助.PHP實(shí)例
維易PHP培訓(xùn)學(xué)院每天發(fā)布《PHP實(shí)例:ThinkPHP中的create方法與自動(dòng)令牌驗(yàn)證實(shí)例教程》等實(shí)戰(zhàn)技能,PHP、MYSQL、LINUX、APP、JS,CSS全面培養(yǎng)人才。
轉(zhuǎn)載請(qǐng)注明本頁(yè)網(wǎng)址:
http://www.fzlkiss.com/jiaocheng/14812.html