客戶端和服務端如何使用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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...