詳解app介面之token
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错误验证失败 }
相關推薦:
以上是詳解app介面之token的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

Windows作業系統是全球最受歡迎的作業系統之一,其新版本Win11備受矚目。在Win11系統中,管理員權限的取得是一個重要的操作,管理員權限可以讓使用者對系統進行更多的操作和設定。本文將詳細介紹在Win11系統中如何取得管理員權限,以及如何有效地管理權限。在Win11系統中,管理員權限分為本機管理員和網域管理員兩種。本機管理員是指具有對本機電腦的完全管理權限

OracleSQL中的除法運算詳解在OracleSQL中,除法運算是一種常見且重要的數學運算運算,用來計算兩個數相除的結果。除法在資料庫查詢中經常用到,因此了解OracleSQL中的除法運算及其用法是資料庫開發人員必備的技能之一。本文將詳細討論OracleSQL中除法運算的相關知識,並提供具體的程式碼範例供讀者參考。一、OracleSQL中的除法運算

我們在電腦組裝的過程中,安裝過程雖然簡單,不過往往都是在接線上遇到問題,經常有裝機用戶誤將CPU散熱器的供電線插到了SYS_FAN上,雖然風扇可以轉動,不過在開機可能會有F1報錯“CPUFanError”,同時也導致了CPU散熱器無法智慧調速。下面裝機之家分享一下電腦主機板上CPU_FAN、SYS_FAN、CHA_FAN、CPU_OPT介面知識科普。電腦主機板上CPU_FAN、SYS_FAN、CHA_FAN、CPU_OPT介面知識科普1、CPU_FANCPU_FAN是CPU散熱器專用接口,12V工作

Go語言作為一門現代化的、高效的程式語言,擁有豐富的程式設計範式和設計模式可以幫助開發者編寫高品質、可維護的程式碼。本文將介紹Go語言中常見的程式設計範式和設計模式,並提供具體的程式碼範例。 1.物件導向程式設計在Go語言中,可以使用結構體和方法實現物件導向程式設計。透過定義結構體和給結構體綁定方法,可以實現資料封裝和行為綁定在一起的物件導向特性。 packagemaini

PHP中的模運算子(%)是用來取得兩個數值相除的餘數的。在本文中,我們將詳細討論模運算子的作用及用法,並提供具體的程式碼範例來幫助讀者更好地理解。 1.模運算子的作用在數學中,當我們將一個整數除以另一個整數時,就會得到一個商和一個餘數。例如,當我們將10除以3時,商數為3,餘數為1。模運算子就是用來取得這個餘數的。 2.模運算子的用法在PHP中,使用%符號來表示模

PHP介面簡介及其定義方式PHP是一種廣泛應用於Web開發的開源腳本語言,具有靈活、簡單、強大等特性。在PHP中,介面(interface)是一種定義多個類別之間公共方法的工具,實現了多態性,讓程式碼更加靈活和可重複使用。本文將介紹PHP介面的概念及其定義方式,同時提供具體的程式碼範例展示其用法。 1.PHP介面概念介面在物件導向程式設計中扮演著重要的角色,定義了類別應

報錯的原因在python中,Tornado中拋出NotImplementedError()的原因可能是因為未實作某個抽象方法或介面。這些方法或介面在父類別中聲明,但在子類別中未實作。子類別需要實作這些方法或介面才能正常運作。如何解決解決這個問題的方法是在子類別中實作父類別聲明的抽象方法或介面。如果您正在使用一個類別來繼承另一個類,並且您看到了這個錯誤,則應該在子類別中實作父類別中所有聲明的抽象方法。如果您正在使用一個接口,並且您看到了這個錯誤,則應該在實作該接口的類別中實作該接口中所有聲明的方法。如果您不確定哪些

介面和抽象類別在設計模式中用於解耦和可擴展性。介面定義方法簽名,抽象類別提供部分實現,子類別必須實作未實現的方法。在策略模式中,介面用於定義演算法,抽象類別或具體類別提供實現,允許動態切換演算法。在觀察者模式中,介面用於定義觀察者行為,抽象類別或具體類別用於訂閱和發布通知。在適配器模式中,介面用於適應現有類,抽象類或具體類可實現相容接口,允許與原有程式碼互動。
