App介面設計之token的php實現

來源:互聯網
上載者:User

標籤:use   原理   return   插入   介面設計   方法   目的   許可權   strong   

為了保證移動端和服務端資料轉送相對安全,需要對介面進行加密傳輸。

一、ttoken的設計目的: 

因為APP端沒有和PC端一樣的session機制,所以無法判斷使用者是否登陸,以及無法保持使用者狀態,所以就需要一種機制來實現session,這就是token的作用

 

token是使用者登陸的唯一票據,只要APP傳來的token和伺服器端一致,就能證明你已經登陸(就和你去看電影一樣,需要買票,拿著票就能進了)

 

二、token設計時的種類: (1)第三方登陸型:   這種token形如的access_token,設計原理是按照OAuth2.0來的,其特點是 定時重新整理(比如兩小時重新整理),目的是因為資料來源將登陸許可權賦予第三方伺服器時必須要控制其有效期間和許可權,要不然第三方伺服器可以不經過使用者同意,無限期從資料來源伺服器擷取使用者任意資料。 (2)APP自用登陸型:  這種token就是一般的APP用的token,因為不經過第三方,而是使用者直接取資料來源伺服器資料,所以設計比較隨意,只需要保證其token的唯一性就行。 三、APP自用登陸型token實現步驟: 

(1)資料庫使用者表添加token欄位time_out這個token到期時間欄位 

(2)使用者登陸時(註冊時自動登陸也需要)產生一個token和到期時間存入表中 

(3)在其他介面調用前判斷token是否正確,正確則繼續,錯誤則讓使用者重新登陸

 

四、APP自用登陸型token實現代碼(公司自用架構及邏輯,主要看邏輯,不要直接複製代碼):

(1)下面是使用者登陸時把token插入資料庫的代碼

  $logininfo[‘token‘] = appuser::settoken();

  $time_out = strtotime("+7 days");

  db::setByPk(‘u_adver‘, array(‘token1‘ => $logininfo[‘token‘], ‘time_out‘ => $time_out), $logininfo[‘id‘]);

(2)//下面是產生token方法代碼

    public static function settoken(){

          $str = md5(uniqid(md5(microtime(true)),true));  //產生一個不會重複的字串

          $str = sha1($str);  //加密

          return $str;

      }

 (3)下面是每個介面都必須調用的token驗證代碼,驗證具體實現是在(4)

  $args[‘token‘] = $_POST[‘token‘];

  $tokencheck = appuser::checktokens($args[‘token‘], ‘u_adver‘);

        if ($tokencheck != 90001) {

            $res[‘msg_code‘] = $tokencheck;

            v_json($res);

        }

(4)token驗證方法,db::是資料庫操作類,這裡設定是token如果七天沒被調用則需要重新登陸(也就是說使用者7天沒有操作APP則需要重新登陸),如果某個介面被調用,則會重新重新整理到期時間

   public static function checktokens($token, $table){

          $res = db::getOneForFields($table, ‘time_out‘, ‘token1 = ?‘, array($token));

          if (!empty($res)) {

                if (time() - $res[‘time_out‘] > 0) {

                    return 90003;  //token長時間未使用而到期,需重新登陸

                }

                $new_time_out = time() + 604800;//604800是七天

                if (db::setWhere($table, array(‘time_out‘ => $new_time_out), ‘token1 = ?‘, array($token))) {

                    return 90001;  //token驗證成功,time_out重新整理成功,可以擷取介面資訊

               }

          }

          return 90002;  //token錯誤驗證失敗

     }

App介面設計之token的php實現

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.