<del id="d4fwx"><form id="d4fwx"></form></del>
      <del id="d4fwx"><form id="d4fwx"></form></del><del id="d4fwx"><form id="d4fwx"></form></del>

            <code id="d4fwx"><abbr id="d4fwx"></abbr></code>
          • 解決前后端分離、跨域等問題的一個(gè)實(shí)例

            2021-01-27    分類: 網(wǎng)站建設(shè)

            一、準(zhǔn)備

            兩臺(tái)服務(wù)器:

            一臺(tái)前端html服務(wù)器 http://admin.tp_mall.com

            一臺(tái)后端獲取數(shù)據(jù)及redis數(shù)據(jù)庫服務(wù)器 http://api.tp_mall.com

            后端php框架:thinkphp5.1

            jsonp

            二、流程及原理

            用戶登錄頁 http://admin.tp_mall.com/login/login.html

            ajax表單提交登錄

            登錄成功將id、uname、usalt、loginTime通過aes對(duì)稱加密生成token

            將token寫入redis數(shù)據(jù)庫(設(shè)置過期時(shí)間)

            ajax返回token及用戶名和頭像(便于顯示)、并且寫入cookie

            跳轉(zhuǎn)首頁并發(fā)送攜帶token的ajax請(qǐng)求數(shù)據(jù)

            新建一個(gè)tp框架中間件AdminLoginCheck.php 攔截http請(qǐng)求來判斷是否登錄

            token有效且未過期表示已登錄,通過中間件到達(dá)控制器返回?cái)?shù)據(jù)給頁面

            刷新redis中的loginTime維持登錄狀態(tài)

            token無效或已過期標(biāo)識(shí)未登錄,返回狀態(tài)并重定向到登錄頁

            三、主要代碼

            AdminLoginCheck中間件主要代碼

            public function handle($request, Closure $next)

            {

            $jsonp = $request->param('callback');

            $token = $request->param('token');

            $aes = new Aes('zyddj123');

            $tokenValue = $aes->decrypt($token);

            $tokenArr = explode(' ', $tokenValue);

            $key = 'adminToken_'.$tokenArr[0];

            $redis = new Redis();

            $redisToken = $redis->get($key);

            $redisTokenValue = $aes->decrypt($redisToken);

            $redisTokenArr = explode(' ', $redisTokenValue);

            if ($redisTokenArr[0] == $tokenArr[0] && $redisTokenArr[1] == $tokenArr[1] && $redisTokenArr[2] == $tokenArr[2] && intval($redisTokenArr[count($redisTokenArr) - 1]) + 7200 > time()) {

            //已經(jīng)登錄 刷新redis中token過期時(shí)間

            $redisTokenArr[count($redisTokenArr) - 1] = time();

            $newToken = $aes->encrypt(implode(' ', $redisTokenArr));

            if (!$redis->set($key, $newToken, 7200)) {

            $ret = [

            'sta' => -2,

            'mes' => '寫入redis中token過期時(shí)間失敗!',

            ];

            echo $jsonp.'('.json_encode($ret).')';

            die;

            }

            } else {

            //未登錄 終止程序

            $ret = [

            'sta' => -1,

            'mes' => '請(qǐng)重新登錄!',

            ];

            echo $jsonp.'('.json_encode($ret).')';

            die;

            }

            return $next($request);

            }

            設(shè)置redis過期時(shí)間

            /**

            * 設(shè)置用戶token的redis過期時(shí)間

            *

            * @param [type] $info 用戶身份信息

            * @return $token or false

            */

            public static function setRedisExpire($info)

            {

            $aes = new Aes('zyddj123');

            $redis = new Redis();

            $tokenValue = [

            'id'=>$info['id'],

            'uname'=>$info['uname'],

            'usalt'=>$info['usalt'],

            'loginTime'=>time()

            ];

            $token = $aes->encrypt(implode(" ",$tokenValue));

            $key = 'adminToken_'.$info['id'];

            return $redis->set($key,$token,7200)?$token:false;

            }

            四、詳細(xì)

            詳細(xì)請(qǐng)移步至我的github

            (前端)https://github.com/zyddj123/mall_html

            (后端)https://github.com/zyddj123/tp_mall

            新聞名稱:解決前后端分離、跨域等問題的一個(gè)實(shí)例
            分享路徑:http://www.jbt999.com/news4/97754.html

            成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)頁設(shè)計(jì)公司、網(wǎng)站收錄域名注冊(cè)、云服務(wù)器虛擬主機(jī)、商城網(wǎng)站

            廣告

            聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:[email protected]。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

            外貿(mào)網(wǎng)站建設(shè)

              <del id="d4fwx"><form id="d4fwx"></form></del>
              <del id="d4fwx"><form id="d4fwx"></form></del><del id="d4fwx"><form id="d4fwx"></form></del>

                    <code id="d4fwx"><abbr id="d4fwx"></abbr></code>
                  • 成人久久影音 | 国产视频情 | 午夜福利樱桃网 | 蜜桃AV久久经品人人搡 | 国产亲妺妺乱A片)) |