国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > PHP > 正文

app接口設計之token的php實現

2019-11-06 09:40:01
字體:
來源:轉載
供稿:網友

app接口設計之token的php實現

1、首先說一句什么是接口:接口簡單來說就是服務器端用來返回給其他程序或者客戶端數據的橋梁

2、接口的作用:根據固定參數返回固定數據,比如客戶端傳a=1,那么服務器端返回a的姓名,客戶端傳a=2,服務器端返回a的性別,而不會返回其他數據。

例如: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'] > 604800) //604800是七天 { return 90003; //token長時間未使用而過期,需重新登陸 } $new_time_out = time() + 604800; if (db::setWhere($table, array('time_out' => $new_time_out), 'token1 = ?', array($token))) { return 90001; //token驗證成功,time_out刷新成功,可以獲取接口信息 } } return 90002; //token錯誤驗證失敗 }
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 稷山县| 砀山县| 中山市| 林周县| 福鼎市| 清水县| 乌兰察布市| 钟山县| 衡东县| 中江县| 老河口市| 夏津县| 阳西县| 轮台县| 丹东市| 西和县| 桐梓县| 常宁市| 梨树县| 富平县| 瑞昌市| 乐亭县| 河池市| 新和县| 永春县| 谢通门县| 万安县| 毕节市| 盈江县| 栾城县| 朝阳市| 繁峙县| 沿河| 沙湾县| 宁津县| 昌黎县| 苏尼特右旗| 连山| 定陶县| 铁岭县| 怀柔区|