首頁 >後端開發 >php教程 >詳解app介面之token

詳解app介面之token

小云云
小云云原創
2018-03-05 13:05:568537瀏覽

1、首先說一句什麼是介面:介面簡單來說就是伺服器端用來傳回給其他程式或是客戶端資料的橋樑

2、介面的作用:依照固定參數傳回固定數據,例如客戶端傳a=1,那麼伺服器端回傳a的姓名,客戶端傳a=2,伺服器端回傳a的性別,而不會回傳其他數據。

3、signature簽章的功能:保證介面與資料的安全性

4、token的作用:和PC登陸的session一樣,作為使用者進入的唯一票據

例如:app與伺服器端的接口、java與php之間不同程式的接口,這些接口一般透過json格式傳輸資料

所以為了確保行動端與服務端資料傳輸相對安全,需要對介面進行加密傳輸

1、token的設計目的: 
因為APP端沒有和PC端一樣的session機制,所以無法判斷使用者是否登陸,以及無法保持使用者狀態,所以就需要一個機制來實現session,這就是token的作用,token是用戶登陸的唯一票據,只要APP傳來的token和伺服器端一致,就能證明你已經登陸(就和你去看電影一樣,需要買票,拿著票就能進了)

2、token設計時的種類: 
(1)第三方登陸型:這種token形如微信的access_token,設計原理是按照OAuth2.0來的,其特點是定時刷新(例如兩小時刷新),目的是因為資料來源將登陸權限賦予第三方伺服器時必須要控制其有效期和權限,要不然第三方伺服器可以不經過用戶同意,無限期從資料來源伺服器取得用戶任意數據

(2)APP自用登陸型:這種token就是一般的APP用的token,因為不經過第三方,而是用戶直接取數據源伺服器數據,所以設計比較隨意,只需要確保其token的唯一性就行

3、APP自用登陸型token實現步驟: 
(1)資料庫使用者表新增token欄位和time_out這個token過期時間欄位 
(2)使用者登陸時(註冊時自動登陸也需要)產生一個token和過期時間存入表中 
(3)在其他介面呼叫前,判斷token是否正確,正確則繼續,錯誤則讓使用者重新登陸

4、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错误验证失败
    }

相關推薦:

PHP之微信公眾號驗證token、回覆內容、推播訊息的方法

PHP開發APP介面視訊教學

分享有關php寫app介面並返回json資料實例

以上是詳解app介面之token的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
上一篇:php規範解析下一篇:php規範解析