Token在android中的使用

  首先Token是一個怎麼樣的東西,Token存在的意義又在哪裏?學過php或是其餘web開發的人都知道一個東西叫session和cookie,這些東西能夠在服務器或是本地保存一些東西,好比說登陸狀態,當用戶登陸後能夠經過session或是cookie在本地保存一段時間的登陸狀態,在這段時間內,用戶再度登陸的時候就不用再輸入用戶名和密碼了,可是過了一段時間後,用戶須要再次進行身份認證,這樣一來的話,一方面節省了不少操做的步驟提高了操做體驗,同時也節省了不少服務器請求,提升了服務器性能,同時也保證了必定的安全性。php

  那麼這個功能如何在android中實現呢?很惋惜的是在android中並無直接提供相似session或cookie的東西,這個時候就是經過Token來完成。Token的存在更像是一個令牌,好比說當咱們須要實現具備用戶權限的操做時,每一次操做都須要向服務器發送請求,讓服務器完成在數據庫中進行用戶名和密碼,這些顯然對於服務器的性能是很不利的。固然有人也會說咱們能夠在一次請求成功後將相似於user_id的東西保存在本地,之後每次請求的時候用user_id進行操做,這樣不是就下降了服務器的負擔,可是這樣的話存在一個問題,就是user_id一旦存儲在本地的時候,不是太有可能會自動回收掉,這樣一來的話就會致使一個問題,就是app不管什麼時候打開都是驗證經過的狀態,這樣一來安全性下降。而Token就是解決這樣一個問題的東西:android

     Token的定義:Token是服務端生成的一串字符串,以做客戶端進行請求的一個令牌,當第一次登陸後,服務器生成一個Token便將此Token返回給客戶端,之後客戶端只需帶上這個Token前來請求數據便可,無需再次帶上用戶名和密碼。程序員

    瞭解了Token的意義後,咱們就更明確的知道爲何要用他了。web

    一、用設備號/設備mac地址做爲Token(推薦)數據庫

    客戶端:客戶端在登陸的時候獲取設備的設備號/mac地址,並將其做爲參數傳遞到服務端。安全

    服務端:服務端接收到該參數後,便用一個變量來接收同時將其做爲Token保存在數據庫,並將該Token設置到session中,客戶端每次請求的時候都要統一攔截,並將客戶端傳遞的token和服務器端session中的token進行對比,若是相同則放行,不一樣則拒絕。服務器

    分析:此刻客戶端和服務器端就統一了一個惟一的標識Token,並且保證了每個設備擁有了一個惟一的會話。該方法的缺點是客戶端須要帶設備號/mac地址做爲參數傳遞,並且服務器端還須要保存;優勢是客戶端不需從新登陸,只要登陸一次之後一直可使用,至於超時的問題是有服務器這邊來處理,如何處理?若服務器的Token超時後,服務器只需將客戶端傳遞的Token向數據庫中查詢,同時並賦值給變量Token,如此,Token的超時又從新計時。微信

    二、用session值做爲Tokencookie

    客戶端:客戶端只需攜帶用戶名和密碼登錄便可。session

    客戶端:客戶端接收到用戶名和密碼後並判斷,若是正確了就將本地獲取sessionID做爲Token返回給客戶端,客戶端之後只需帶上請求數據便可。

    分析:這種方式使用的好處是方便,不用存儲數據,可是缺點就是當session過時後,客戶端必須從新登陸才能進行訪問數據。


不是悶騷的程序員算不上程序員。個人微信公衆號「那點鼻事」,在這裏週一到週五天天一篇文章,與技術無關,只哈牛逼。

相關文章
相關標籤/搜索