相關(guān)關(guān)鍵詞
關(guān)于我們
最新文章
- PHP中opcode緩存簡(jiǎn)單用法分析
- thinkPHP控制器變量在模板中的顯示方法示例
- PHP move_uploaded_file() 函數(shù)(將上傳的文件移動(dòng)到新位置)
- dirname(__FILE__)的含義和應(yīng)用說明
- thinkPHP5框架實(shí)現(xiàn)分頁查詢功能的方法示例
- PHP中單雙號(hào)與變量
- PHP獲得當(dāng)日零點(diǎn)時(shí)間戳的方法分析
- Laravel ORM對(duì)Model::find方法進(jìn)行緩存示例詳解
- PHP讀寫文件高并發(fā)處理操作實(shí)例詳解
- 【CLI】利用Curl下載文件實(shí)時(shí)進(jìn)度條顯示的實(shí)現(xiàn)
利用php-cli和任務(wù)計(jì)劃實(shí)現(xiàn)刷新token功能的方法
1、業(yè)務(wù)需求
需要實(shí)現(xiàn)這樣一個(gè)功能:在第三方授權(quán)的認(rèn)證當(dāng)中,在用戶首次登錄授權(quán)我們會(huì)得到一個(gè)access_token,有效期為25小時(shí),還會(huì)得到一個(gè)refresh_token,有效期為30天。
我們只要保存好這個(gè)refresh_token,在30天內(nèi)我們都可以用這個(gè)refresh_token去請(qǐng)求一個(gè)api,他會(huì)返回一個(gè)新的access_token。這樣我們只需要讓用戶授權(quán)一次,我們就可以獲得長(zhǎng)達(dá)30天的一個(gè)授權(quán)期限。
這里可以分為幾個(gè)點(diǎn):
<1>這個(gè)應(yīng)該是要定期執(zhí)行的一個(gè)任務(wù)。
25小時(shí)才會(huì)過期,那么我們12小時(shí)刷一次就足夠了,并不需要很頻繁的刷新。假設(shè)這樣一種情況:讓一個(gè)頁面持續(xù)的運(yùn)行,用一個(gè)while的死循環(huán)去執(zhí)行一個(gè)任務(wù),執(zhí)行完之后sleep很長(zhǎng)一段時(shí)間,然后再繼續(xù)執(zhí)行。這樣做也是可以的,但是比較占資源。他執(zhí)行的時(shí)間很少,等待的時(shí)間卻很長(zhǎng),沒必要這樣一直等待。
<2>這個(gè)應(yīng)該不需要是一個(gè)可以訪問到的頁面。
是我們內(nèi)部執(zhí)行的一個(gè)任務(wù),不需要是人人可以訪問到的一個(gè)頁面。
<3>這個(gè)頁面應(yīng)該也要和框架融合在一起,可以訪問到各種資源。
一個(gè)普通的php頁面恐怕是不行的,我們需要跟框架融合的一個(gè)頁面,需要可以訪問到各種資源,比如說redis,比如說config,等等。
2、用cli模式運(yùn)行codeigniter的頁面
<1>cli的頁面特性
什么是cli模式?就是命令行模式。我們可以不用url來訪問php頁面,而使用命令行來訪問,這是可以的。
對(duì)頁面來說,什么都不需要改變,比如:
>同樣要是一個(gè)普通的controller,要繼承自CI_Controller;
>要定義路由器,這個(gè)頁面必須也是經(jīng)由路由訪問得到;
>甚至仍然可以添加這樣的聲明
defined('BASEPATH') OR exit('No direct script access allowed');
>可以通過添加一個(gè)判斷讓頁面只能讓cli訪問:
public function __construct() { parent::__construct(); if (!is_cli()) exit("不正確的訪問方式"); }