1. 程式人生 > >php技術 網站PC端用手機APP掃碼實現登入

php技術 網站PC端用手機APP掃碼實現登入

去年做的功能,整理一下分享出來

如淘寶,騰訊等網站登入頁面,都有APP掃碼登入這個功能,去年也做了一個,基於自己的APP實現, 並非第三方登陸.

思路:1. 生成一個二維碼, 二維碼連結帶有金鑰. 2. 用資料庫表記錄這次的金鑰, 方便APP返回使用者ID時比對. 3. 前端頁面需要進行ajax輪詢,去獲取使用者ID是否登陸的狀態


1. 點選右上角時, 要ajax生成一個二維碼. 不要一開始就生成, 或許別人不用掃碼登入呢


2. 二維碼生成方法.

前端, 切換二維碼登入時觸發, 所以要用ajax,去填充iframe, 當然你可以直接給iframe的src上加二維碼的方法路徑,



2.生成二維碼後, sign的金鑰就寫入了資料庫, 前端ajax開始輪詢,如果輪詢為1,則說明已經登入


3. 我是統一寫的一個apilogin控制器, 這個是二維碼生成方法. 方法裡帶有sign,主要就是這個. sign方法是oauth2.0協議

二維碼生成的只是個連結, url的話, 是一個回撥的介面地址, 為了安全,其實可以略去, 只用網址加引數


4. 這時 APP端需要實現, 掃碼功能, 掃碼後,手機app端就讀取到了這個網址連結, 獲得了引數, APP端點選確認登入按鈕, 


5.APP端確認時,驗證sign金鑰, 如果正確 就跳轉到接收到的url介面地址, 並且帶上sign簽名(token), addtime當前時間,userid.

token和url 是 掃碼獲得的, 再返回給介面. addtime是確認時間, 可以做過期驗證. userid是手機端使用者id, 可以進行加密保護, 也可以直接明文, 反正別人看不到

6. 回撥方法, 接收APP返回的介面,根據token去查詢二維碼登入表.


7.資料庫欄位

id, username 使用者ID,  token 簽名, add_time生成時間, 還可以加 回撥時間

當PC端生成時, 是沒有使用者ID的, APP掃碼後,回撥給了使用者ID, 需要更新記錄

8. 最後PC端的輪詢. 輪詢前端探查是否掃碼登入狀態, 我加了個 計數變數, 避免長時間輪詢消耗資源, 


上面點選二維碼時, 生成二維碼 , 有個開始輪詢, 3秒執行一次輪詢, 輪詢方法裡面還加了一個計算, 執行一次+1, 達到20次時, 20*3=60秒.重新整理一次頁面.

9.ajax輪詢的請求方法, 根據當前session記錄的sign進行查詢, 這是為了避免客戶端開多個視窗同時掃碼,


10.查詢到以後, 寫入session, 返回1 ,告訴前端, 登入成功進行跳轉到index.


相關推薦

php技術 網站PC手機APP實現登入

去年做的功能,整理一下分享出來 如淘寶,騰訊等網站登入頁面,都有APP掃碼登入這個功能,去年也做了一個,基於自己的APP實現, 並非第三方登陸. 思路:1. 生成一個二維碼, 二維碼連結帶有金鑰. 2. 用資料庫表記錄這次的金鑰, 方便APP返回使用者ID時比對. 3. 前

二維app登入其它形態系統

今天我們就介紹一下,如何使用微信應用內二維碼掃描功能,掃描PC端網站  彈出二維碼   實現PC端網站自動登入功能。 我們直入主題。 PC端微信二維碼掃碼登入實現思路 1. 首先要保證每次彈出的二維碼是唯一的。例如我們可以在程式內部,通過sessio

php 識別是pc訪問還是手機訪問網站

首先推薦一個php輕量級識別類,Mobile-Detect 專門識別是手機端還是pc端訪問網站,這樣就可以根據訪問的終端型別指向手機瀏覽器適配的網站還是pc瀏覽器的網站。 Mobile-Detect官網連結如下MobileDetect    下面是我寫得簡單的跳轉適配P

PC變成手機的時候,把特效去掉(把canvas標簽去掉)

window 方法 spa color win css display screen span PC端變成手機端的時候,把特效去掉(把canvas標簽去掉)<script> if (screen.width < 768){ $(‘can

手機APP觀看熱門劇《楚喬傳》的P2P流媒體直播系統解決方案

P2P直播 流媒體系統 手機追劇 近期熱播的大劇《楚喬傳》,網友們對最新劇情討論得熱火朝天:楚喬傳》什麽時候結局? 最新劇情預告呢?楚喬燕洵是否分手?蒙楓喜歡宇文玥嗎?掀起了一股觀看風潮。 隨著這部勵誌大劇熱播,一些關於手機觀看《楚喬傳》的APP的搜索關鍵詞迅速鋪開來:

nginx 做pc手機的分離

nginx 手機端和web端分離server { listen 80; server_name abc.com; add_header Content-Security-Policy upgrade-

根據當前設備環境來做pc手機網頁顯示

需要 err 網頁 nbsp android avi location ber 方法 當你的網頁使用了兩套代碼(移動端和pc端代碼)來顯示你的網頁時,就需要用到這種方法: 手機端: if (!/Android|webOS|iPhone|iPod|BlackBerry/i

微信pc手機上傳處理

一.原因   在微信通過電腦版和瀏覽器登入時,呼叫了微信上傳的介面,wx.getLocalImgData或返回失敗。   沒辦法,只有處理當電腦上傳時,使用ajaxuploadfile上傳。 二.方法 function upload_weixin_pic(e) { e=e||{};

js實現拖拽相容pc手機

pc端拖動時候用到的三個事件:mousedown、mousemove、mouseup 在移動端與之相對應的分別是:touchstart、touchmove、touchend事件。 還有一點要注意的是在PC端獲取當前滑鼠的座標是:event.clientX和event.clientY, 在移動

跳出彈窗頁面禁止滾動(PC手機

pc端如何實現 1.當彈窗顯示時,為body元素新增屬性:overflow:hidden, 當關閉彈窗時移除該屬性即可2.在彈窗的div上設定 @scroll.stop.prevent &lt;div @scroll.stop.prevent&gt; 你要顯示的內容 &lt;/d

pc手機瀏覽器、微信內.點選返回鍵,返回到上一個頁面瀏覽的位置的實現

第一步:需要注意引入的js jquery.js jquery.cookie.js 第二部:在被返回的前一頁加入以下程式碼 <script type="text/javascript"> $(function () {

php 如何區分pc與移動

<?php function isMobile() { // 如果有HTTP_X_WAP_PROFILE則一定是移動裝置 if (isset ($_SERVER['HTTP_X_WAP_PROFILE'])) { return

Nginx根據Pc手機訪問不同頁面

有的時候一個網站需要區別是pc訪問的 還是手機訪問的,根據平臺的不同讓他跳轉到不同的入口;可以這樣實現: server { ### nginx 用來當靜態資源的伺服器 listen 83; server_name localhost; underscores

如何在專案PC手機使用的rem,怎麼設定

做一個PC端的網頁,設計圖是1920X1080的. 要在常見屏上顯示正常(比例正確可) 1280X720 1366X768 1440X900 1920X1080 使用了幾種辦法 1.內容在一屏內顯示的,採用了(內容框)上下左右居中的辦法,裡面的內容絕對於這個內容框定位

js 判斷瀏覽器處於pc手機

if (/Android|webOS|iPhone|iPod|BlackBerry/g.test(navigator.userAgent)) { window.location.href = "http://phone"; } else { window.location

Android與PHP互動:客戶HTTP協議與服務通訊

        為了實現Android客戶端和服務端的通訊,Android SDK為我們提供了Apache的HttpClient來方便我們使用各種HTTP服務。可以把HttpClient看成一個瀏覽器,通過它可以方便地發出GET請求和POST請求來獲得服務端響應。 下面我們

輪播(pc手機都適用)

<!DOCTYPE html> <html lang="en"> <head>     <meta charset="utf-8">     <title>Swiper demo</title>    

PCtansform:scale適配

背景:我做的是一個現場活動的遊戲頁面,對前端適配要求比較高。我選擇js框架是vue,ui框架是element-ui。當初我就想做個最小寬度1200然後再結合媒體查詢一起使用。然而發現寫的程式碼太多了感覺css控制特別麻煩。而且現場活動的電腦螢幕尺寸還特別的千奇百怪沒辦法只能重

織夢pc手機統一後臺的解決方案

最近做了一個專案,客戶要求pc端與手機端後臺用一個。一個簡單的企業網站。 我自然想起了織夢模板。可是找來找去,網上有很多都是獨立的手機版,或者獨立的pc端。很少有pc端和手機端統一的時候。 其實,網上提供的手機端模板類似於織夢的一個外掛。但是除錯過程中總會出錯。 下面我把

js判斷當前頁面是PC還是手機訪問?

執行當前js,可判斷當前是PC端還是手機端訪問 <script type="text/javascript"> function IsPC() { var userAgentInfo = navigator.userAgent; var Agents = ["A