是這樣的,本人想用html/css/js來做一個Android的Hybrid APP,用的是Cordova來封裝。
至於Server方面則是PHP。
我想用Token來替代Session來判斷使用者的登入狀態,因為完全就是個小白,第一次接觸Token,不清楚流程。
我的問題將(括弧)起來
我的設想是這樣:
使用者點擊登入後,用Ajax發送使用者名稱和密碼到Server,判斷使用者資訊無誤後php產生一個Token(怎麼產生?需要拿使用者資訊來產生嗎?需不需要加密?怎麼加密?)。
然後產生的Token存在資料庫,再把Token傳回給使用者APP(用什麼傳,JSON安全嗎,怎麼確保Token不被截取,或截取了也沒辦法幹什麼壞事),並儲存在APP本地。
登入後跳轉到新的頁面,新的頁面一開始就會Ajax發送存在本地的使用者名稱和Token,如果Token和資料庫的不相同就會被取消登入狀態,跳回登入頁面。(Token需不需要一段時間更新一次,還是待到使用者下一次登入的時候才更新?如果需要更新,那麼推薦的更新間隔時間長度是多久?)
使用者的每個會與Server進行溝通的操作都要進行Token驗證【如第三步】。(需不需要每個操作都驗證,這樣會不會照常Server和Database的負擔,最重要的是使用者APP方面效率會不會很差?)
希望有人幫幫我這個小白,網上搜尋了很多都找不到我想要的答案。。。
回複內容:
是這樣的,本人想用html/css/js來做一個Android的Hybrid APP,用的是Cordova來封裝。
至於Server方面則是PHP。
我想用Token來替代Session來判斷使用者的登入狀態,因為完全就是個小白,第一次接觸Token,不清楚流程。
我的問題將(括弧)起來
我的設想是這樣:
使用者點擊登入後,用Ajax發送使用者名稱和密碼到Server,判斷使用者資訊無誤後php產生一個Token(怎麼產生?需要拿使用者資訊來產生嗎?需不需要加密?怎麼加密?)。
然後產生的Token存在資料庫,再把Token傳回給使用者APP(用什麼傳,JSON安全嗎,怎麼確保Token不被截取,或截取了也沒辦法幹什麼壞事),並儲存在APP本地。
登入後跳轉到新的頁面,新的頁面一開始就會Ajax發送存在本地的使用者名稱和Token,如果Token和資料庫的不相同就會被取消登入狀態,跳回登入頁面。(Token需不需要一段時間更新一次,還是待到使用者下一次登入的時候才更新?如果需要更新,那麼推薦的更新間隔時間長度是多久?)
使用者的每個會與Server進行溝通的操作都要進行Token驗證【如第三步】。(需不需要每個操作都驗證,這樣會不會照常Server和Database的負擔,最重要的是使用者APP方面效率會不會很差?)
希望有人幫幫我這個小白,網上搜尋了很多都找不到我想要的答案。。。
1,使用者登入產生一個唯一值token存入redis資料庫(token的產生:可以使用 random_int(), random_bytes(), or openssl_random_pseudo_bytes()函數產生一個隨機數加上該使用者的ip。如果你希望更安全一點,還可以進行一些變換,具體怎麼做你可以看看密碼學方面的書籍。);
2,所有網路請求必須使用https,否則token很容易被竊取。(web程式不能保護token,因為web網頁的演算法會寫在js裡面,js檔案可以被瀏覽,所以別人瀏覽js檔案就知道了你的演算法,即使js被混淆也還是不安全,安卓和ios程式如果被破解演算法也會被別人知道,所以最好的方案還是使用https);
3,token必須設定到期時間,這個時間隨意,並沒有特別的限制,可以讓產品人員設定。如果沒有人來定,可以使用15分鐘;
4,如果需要使用者登入才能訪問的內容每次請求都必須帶上token,並且要進行token驗證。(這也是為什麼使用redis而不是mysql儲存token的原因,提高請求速度);預設php使用檔案儲存體session,每次都要讀取檔案,其實也會有效能損失,並不一定比讀資料庫效能會好。所以你不需要擔心讀資料庫導致的效能問題。
5,如果是web網頁程式,一般登入後可以把token儲存在cookie裡面, 同時設定HTTP-Only(表示該cookie值不能被js讀取)
你的流程看著我不是很明白。給你一個思路,token的作用在於這是一個不能篡改的字串,篡改後即無效,前端的任何資料都是可以非法篡改的。1:使用者登陸後PHP讀取使用者的token並輸出到頁面,token一般有使用者標識token和使用者身份token,當然用一個也可以看你後端token的檢驗演算法。2:前端和後端資料互動時,將資料和token傳入後端,token起到使用者身份及標識的作用。前端不應該將使用者名稱和密碼傳入後端。token若發生篡改則檢驗失敗。3:token的產生跟使用者資訊並不需要有任何關聯,token由認意位元的仁意字串組成,存進資料庫中,token的生命週期看你需求,一般產生一次永久使用即可,資料庫中的user表中增加token欄位用於儲存token,或者建立一張表,將user_ID和token關聯。