app接口設(shè)計(jì)之token的php實(shí)現(xiàn)

app接口設(shè)計(jì)之token的php實(shí)現(xiàn)

1梅忌、首先說(shuō)一句什么是接口:接口簡(jiǎn)單來(lái)說(shuō)就是服務(wù)器端用來(lái)返回給其他程序或者客戶(hù)端數(shù)據(jù)的橋梁

2捻脖、接口的作用:根據(jù)固定參數(shù)返回固定數(shù)據(jù)干发,比如客戶(hù)端傳a=1撬统,那么服務(wù)器端返回a的姓名甥材,客戶(hù)端傳a=2怠晴,服務(wù)器端返回a的性別赴捞,而不會(huì)返回其他數(shù)據(jù)笨忌。

3频丘、signature簽名的作用:保證接口與數(shù)據(jù)的安全

4办成、token的作用:和PC登陸的session一樣,作為用戶(hù)進(jìn)入的唯一票據(jù)

例如:app與服務(wù)器端的接口搂漠、java與php之間不同程序的接口迂卢,這些接口一般通過(guò)json格式傳輸數(shù)據(jù)

所以為了保證移動(dòng)端和服務(wù)端數(shù)據(jù)傳輸相對(duì)安全,需要對(duì)接口進(jìn)行加密傳輸

1、token的設(shè)計(jì)目的:
因?yàn)锳PP端沒(méi)有和PC端一樣的session機(jī)制而克,所以無(wú)法判斷用戶(hù)是否登陸靶壮,以及無(wú)法保持用戶(hù)狀態(tài),所以就需要一種機(jī)制來(lái)實(shí)現(xiàn)session员萍,這就是token的作用亮钦,token是用戶(hù)登陸的唯一票據(jù),只要APP傳來(lái)的token和服務(wù)器端一致充活,就能證明你已經(jīng)登陸(就和你去看電影一樣蜂莉,需要買(mǎi)票,拿著票就能進(jìn)了)

2混卵、token設(shè)計(jì)時(shí)的種類(lèi):
(1)第三方登陸型:這種token形如微信的access_token映穗,設(shè)計(jì)原理是按照OAuth2.0來(lái)的,其特點(diǎn)是定時(shí)刷新(比如兩小時(shí)刷新)幕随,目的是因?yàn)閿?shù)據(jù)源將登陸權(quán)限賦予第三方服務(wù)器時(shí)必須要控制其有效期和權(quán)限蚁滋,要不然第三方服務(wù)器可以不經(jīng)過(guò)用戶(hù)同意,無(wú)限期從數(shù)據(jù)源服務(wù)器獲取用戶(hù)任意數(shù)據(jù)

(2)APP自用登陸型:這種token就是一般的APP用的token赘淮,因?yàn)椴唤?jīng)過(guò)第三方辕录,而是用戶(hù)直接取數(shù)據(jù)源服務(wù)器數(shù)據(jù),所以設(shè)計(jì)比較隨意梢卸,只需要保證其token的唯一性就行

3走诞、APP自用登陸型token實(shí)現(xiàn)步驟:
(1)數(shù)據(jù)庫(kù)用戶(hù)表添加token字段和time_out這個(gè)token過(guò)期時(shí)間字段
(2)用戶(hù)登陸時(shí)(注冊(cè)時(shí)自動(dòng)登陸也需要)生成一個(gè)token和過(guò)期時(shí)間存入表中
(3)在其他接口調(diào)用前,判斷token是否正確蛤高,正確則繼續(xù)蚣旱,錯(cuò)誤則讓用戶(hù)重新登陸

4、APP自用登陸型token實(shí)現(xiàn)代碼(公司自用框架及邏輯戴陡,主要看邏輯塞绿,不要直接復(fù)制代碼):

(1)//下面是用戶(hù)登陸時(shí)把token插入數(shù)據(jù)庫(kù)的代碼
$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)); //生成一個(gè)不會(huì)重復(fù)的字符串
$str = sha1($str); //加密
return $str;
}

(3)//下面是每個(gè)接口都必須調(diào)用的token驗(yàn)證代碼,驗(yàn)證具體實(shí)現(xiàn)是在(4)
$args['token'] = $_POST['token'];
$tokencheck = appuser::checktokens($args['token'], 'u_adver');
if ($tokencheck != 90001)
{
$res['msg_code'] = $tokencheck;
v_json($res);
}

(4)//token驗(yàn)證方法恤批,db::是數(shù)據(jù)庫(kù)操作類(lèi)异吻,這里設(shè)置是token如果七天沒(méi)被調(diào)用則需要重新登陸(也就是說(shuō)用戶(hù)7天沒(méi)有操作APP則需要重新登陸),如果某個(gè)接口被調(diào)用喜庞,則會(huì)重新刷新過(guò)期時(shí)間
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長(zhǎng)時(shí)間未使用而過(guò)期诀浪,需重新登陸
}
$new_time_out = time() + 604800;
if (db::setWhere($table, array('time_out' => $new_time_out), 'token1 = ?', array($token)))
{
return 90001; //token驗(yàn)證成功,time_out刷新成功赋荆,可以獲取接口信息
}
}
return 90002; //token錯(cuò)誤驗(yàn)證失敗
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末笋妥,一起剝皮案震驚了整個(gè)濱河市懊昨,隨后出現(xiàn)的幾起案子窄潭,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,214評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件嫉你,死亡現(xiàn)場(chǎng)離奇詭異月帝,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)幽污,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)嚷辅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人距误,你說(shuō)我怎么就攤上這事簸搞。” “怎么了准潭?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,543評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵趁俊,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我刑然,道長(zhǎng)寺擂,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,221評(píng)論 1 279
  • 正文 為了忘掉前任泼掠,我火速辦了婚禮怔软,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘择镇。我一直安慰自己挡逼,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布腻豌。 她就那樣靜靜地躺著挚瘟,像睡著了一般。 火紅的嫁衣襯著肌膚如雪饲梭。 梳的紋絲不亂的頭發(fā)上乘盖,一...
    開(kāi)封第一講書(shū)人閱讀 49,007評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音憔涉,去河邊找鬼订框。 笑死,一個(gè)胖子當(dāng)著我的面吹牛兜叨,可吹牛的內(nèi)容都是我干的穿扳。 我是一名探鬼主播,決...
    沈念sama閱讀 38,313評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼国旷,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼矛物!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起跪但,我...
    開(kāi)封第一講書(shū)人閱讀 36,956評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤履羞,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體忆首,經(jīng)...
    沈念sama閱讀 43,441評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡爱榔,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了糙及。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片详幽。...
    茶點(diǎn)故事閱讀 38,018評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖浸锨,靈堂內(nèi)的尸體忽然破棺而出唇聘,到底是詐尸還是另有隱情,我是刑警寧澤柱搜,帶...
    沈念sama閱讀 33,685評(píng)論 4 322
  • 正文 年R本政府宣布雳灾,位于F島的核電站,受9級(jí)特大地震影響冯凹,放射性物質(zhì)發(fā)生泄漏谎亩。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評(píng)論 3 307
  • 文/蒙蒙 一宇姚、第九天 我趴在偏房一處隱蔽的房頂上張望匈庭。 院中可真熱鬧,春花似錦浑劳、人聲如沸阱持。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,240評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)衷咽。三九已至,卻和暖如春蒜绽,著一層夾襖步出監(jiān)牢的瞬間镶骗,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,464評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工躲雅, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留鼎姊,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,467評(píng)論 2 352
  • 正文 我出身青樓相赁,卻偏偏與公主長(zhǎng)得像相寇,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子钮科,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容