ThinkPHP中的create方法與自動令牌驗證執行個體

來源:互聯網
上載者:User
這篇文章主要介紹了ThinkPHP中的create方法與自動令牌驗證的實現方法,有著非常重要的用途,需要的朋友可以參考下

本文執行個體形式展示了ThinkPHP中的create方法與自動令牌驗證的實現方法,具體步驟如下:

一、資料表結構

user表結構如下:

id username password

二、view模板部分

\aoli\Home\Tpl\default\User\create.html頁面如下:

<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部分:

\aoli\Home\Lib\Action.php頁面如下:

<?php class UserAction extends Action {  function create(){     $this->display();      }      function addit(){     //向表user中添加表單內容     $user=M('user');     $user->create();     $user->add();     //判斷是否存在令牌驗證     if(!$user->autoCheckToken($_POST)){       dump('no');      }else{       dump('yes');        } }?>

1、在對錶單提交過來的資料進行操作之前,我們往往需要手動建立需要的資料,例如上面提交的表單資料:

 //執行個體化User模型  $user=M('user');  //擷取表單的POST資料  $data['username']=$_POST['username']  $data['password']=$_POST['password']  //寫入到資料庫   $user->data($data)->add();

附:使用data方法建立的資料對象不會進行自動驗證和過濾操作,需要自行處理,如果只是想簡單建立一個資料對象,並且不需要完成一些額外的功能的話,可以使用data方法簡單的建立資料對象。

2、ThinkPHP可以協助我們快速地建立資料對象,最典型的應用就是自動根據表單資料建立資料對象。create方法建立的資料對象是儲存在記憶體中的,並沒有實際的寫入到資料庫中。

   //執行個體化user模型    $user=M('user');     //根據表單提交的POST資料建立資料對象,並儲存在記憶體中,可以通過dump($user)查看    $user=create();   //把建立的資料對象寫入資料庫中    $user->add();

3、create方法支援從其它方式建立資料對象,如,從其它的資料對象或者數組等。

   $data['name']='ThinkPHP';   $data['eamil']='ThinkPHP@gmail.com';   $user->create($data);   甚至還可以支援從對象建立新的資料對象,如從user資料對象建立新的member資料對象   $user=M('user');   $user->find(1);   $member=M('member');   $member->create($user);

4、create方法在建立資料對象的同時,還完成了一些很有意義的工作,包括令牌驗證、資料自動驗證、欄位類型尋找,資料自動完成等。

因些,我們熟悉的令牌驗證、自動驗證和自動完成功能,其實都必須通過create方法才會生效。

5、令牌驗證:

功能:可以有效防止表單的遠程提交等安全防護。

config.php中添加如下配置:

   'TOKEN_ON'   =>  true, //是否開啟令牌驗證   'TOKEN_NAME'  =>  'token',// 令牌驗證的表單隱藏欄位名稱   'TOKEN_TYPE'  =>  'md5',//令牌驗證雜湊規則

自動令牌會向當前SESSION會話當中放上一個md5加密的字串。並將這個字串以隱藏欄位的形式插入到表單的form之前。這個字串出現在兩個地方,一個是在SESSION當中,另一個就是在表單當中。當你提交表單後,伺服器第一件事就是對比這個SESSION資訊,如果正確的話,准許表單提交,否則不允許提交。

查看create.html的的原始碼會看到在表單form的結束標誌之前會多了一個自動產生的隱藏欄位

<input type="hidden" name="token" value="eef419c3d14c9c93caa7627eedaba4a5" />

(1)、如果希望自己控制隱藏欄位的位置,可以手動在表單頁面添加 {__TOKEN__} 標識,系統會在輸出模板的時候自動替換。

(2)、如果在開啟表單令牌驗證的情況下,個別表單不需要使用令牌驗證
功能,可以在表單頁面添加 {__NOTOKEN__} ,則系統會忽略當前表單的令牌驗證。

(3)、如果頁面中存在多個表單,建議添加 {__TOKEN__} 標識,並確保只有一個表單需要令牌驗證。

(4)、如果使用create方法建立資料對象的話,會同時自動進行表單驗證,如果沒有使用該方法的話,則需要手動調用模型的autoCheckToken方法進行表單驗證。

if (!$User->autoCheckToken($_POST)){// 令牌驗證錯誤}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.