客戶端和服務端如何使用Token和Session

来源:http://www.cnblogs.com/ganchuanpu/archive/2017/05/17/6870240.html
-Advertisement-
Play Games

一、我們先解釋一下他的含義: 1、Token的引入:Token是在客戶端頻繁向服務端請求數據,服務端頻繁的去資料庫查詢用戶名和密碼併進行對比,判斷用戶名和密碼正確與否,並作出相應提示,在這樣的背景下,Token便應運而生。 2、Token的定義:Token是服務端生成的一串字元串,以作客戶端進行請求 ...


一、我們先解釋一下他的含義:
    1、Token的引入:Token是在客戶端頻繁向服務端請求數據,服務端頻繁的去資料庫查詢用戶名和密碼併進行對比,判斷用戶名和密碼正確與否,並作出相應提示,在這樣的背景下,Token便應運而生。
    2、Token的定義:Token是服務端生成的一串字元串,以作客戶端進行請求的一個令牌,當第一次登錄後,伺服器生成一個Token便將此Token返回給客戶端,以後客戶端只需帶上這個Token前來請求數據即可,無需再次帶上用戶名和密碼。
    3、使用Token的目的:Token的目的是為了減輕伺服器的壓力,減少頻繁的查詢資料庫,使伺服器更加健壯。


二、如何使用Token?
1、用設備號/設備mac地址作為Token(推薦)
    客戶端:客戶端在登錄的時候獲取設備的設備號/mac地址,並將其作為參數傳遞到服務端。
    服務端:服務端接收到該參數後,便用一個變數來接收同時將其作為Token保存在資料庫,並將該Token設置到session中,客戶端每次請求的時候都要統一攔截,並將客戶端傳遞的token和伺服器端session中的token進行對比,如果相同則放行,不同則拒絕。
    分析:此刻客戶端和伺服器端就統一了一個唯一的標識Token,而且保證了每一個設備擁有了一個唯一的會話。該方法的缺點是客戶端需要帶設備號/mac地址作為參數傳遞,而且伺服器端還需要保存;優點是客戶端不需重新登錄,只要登錄一次以後一直可以使用,至於超時的問題是有伺服器這邊來處理,如何處理?若伺服器的Token超時後,伺服器只需將客戶端傳遞的Token向資料庫中查詢,同時並賦值給變數Token,如此,Token的超時又重新計時。
2、用session值作為Token
    客戶端:客戶端只需攜帶用戶名和密碼登陸即可。
    客戶端:客戶端接收到用戶名和密碼後並判斷,如果正確了就將本地獲取sessionID作為Token返回給客戶端,客戶端以後只需帶上請求數據即可。
    分析:這種方式使用的好處是方便,不用存儲數據,但是缺點就是當session過期後,客戶端必須重新登錄才能進行訪問數據。

 

三、使用過程中出現的問題以及解決方案?

    剛纔我們輕鬆介紹了Token的兩種使用方式,但是在使用過程中我們還出現各種問題,Token第一種方法中我們隱藏了一個在網路不好或者併發請求時會導致多次重覆提交數據的問題。

    該問題的解決方案:將session和Token套用,如此便可解決,如何套用呢?請看這段解釋:

wKioL1QX85nCkJ5qAABWcdNyC0g731.png

     這就是解決重覆提交的方案。

/**
 * 用戶登錄,將私有token保存
 * 
 * @param appContext
 * @param username
 * @param password
 * @return GitlabUser用戶信息
 * @throws IOException
 */
public static User login(AppContext appContext, String userEmail,
        String password) throws AppException {
    String urlString = URLs.LOGIN_HTTPS;
    Session session = getHttpRequestor()
            .init(appContext, HTTPRequestor.POST_METHOD, urlString)
            .with("email", userEmail)
            .with("password", password)
            .to(Session.class);
    // 保存用戶的私有token
    if (session != null && session.get_privateToken() != null) {
        String token = CyptoUtils.encode(GITOSC_PRIVATE_TOKEN, session.get_privateToken());
        appContext.setProperty(PRIVATE_TOKEN, token);
    }
    return session;
}

  

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 原文出處http://mp.weixin.qq.com/s/NGqdjhoU3MR9LD0yH6tKIw 棧-先進後出堆-類比成書於書架(形象),只要知道Key就可以找到value 基礎數據類型(Undefind,Null,Boolean,String,Number),按值訪問,直接操作實際值 引用 ...
  • - MVVM```//vm -> VM ->var vm = new Vue({el:'',data:{// 相當於Model -> Mmsg:''},methods:{this -> vmthis.msg}})MVVM的作用是什麼呢?傳統的操作dom的做法是將邏輯與視圖操作完全糅合在一起了,為了系 ...
  • 五、什麼是層模型? 什麼是層佈局模型?層佈局模型就像是圖像軟體PhotoShop中非常流行的圖層編輯功能一樣, 每個圖層能夠精確定位操作,但在網頁設計領域,由於網頁大小的活動性,層佈局沒能受到熱捧。 但是在網頁上局部使用層佈局還是有其方便之處的。下麵我們來學習一下html中的層佈局。 如何讓html ...
  • 一、安裝express前面都講了 1.express。 cnpm || npm install express --save 2.中間件 a.cnpm || npm install body-parser --save 當post請求的時候,需要用這個中間件來處理參數 b.cnpm || npm i ...
  • 1.什麼是全形和半形? 全形:是一種電腦字元,是指一個全形字元占用兩個標準字元(或兩個半形字元)的位置。全形占兩個位元組。 漢字字元和規定了全形的英文字元及國標GB2312-80中的圖形符號和特殊字元都是全形字元。在全形中,字母和數字等與漢字一樣占據著等寬的位置。 半形:是指一個字元占用一個標準的字元 ...
  • HTML: CSS: HTML: css: ...
  • 1,先搞個java jdk。我先用的1.7版本的,用cordova打包的時候各種報錯,應該是向下不相容吧。又換了個1.8版本。裝jdk一定要註意jdk跟jre不能都裝在目標文件夾的根目錄下,jdk跟jre在同一文件夾下會報錯。 2,裝完之後,要配置下環境變數,電腦→屬性→高級系統設置→高級→環境變 ...
  • 一,效果圖。 二,工程圖。 三,代碼。 AppDelegate.h AppDelegate.m ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...