app 與服務器交互 token

Token是什麼?php

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

一.產生緣由

app 應用須要訪問服務器,此過程當中涉及到身份認證和權限控制的問題,如何搭建 app 和服務器之間信任的橋樑?數組

咱們都知道,session、cookie 是做爲瀏覽器裏面的用戶和服務器之間認證的一個方式,而app 和服務器之間的交流也是使用的 http 請求,很明顯它們遇到的問題是差很少的,可是由於 app 和瀏覽器又不徹底同樣(瀏覽器能夠存放 cookie),因此咱們能夠借鑑瀏覽器和服務器的思想來解決 app 和服務器端的瀏覽器

cookie、session 的實現方式:
cookie 的實現方式是瀏覽器自己支持服務器端向瀏覽器寫入鍵值對數據,固然客戶端能夠禁止服務器向客戶端寫入 cookie。
session 的實現方式是根據客戶端的請求來找出當前客戶端在服務器端的存放信息,有兩種實現方式:
1.使用 cookie 寫入 jsessionid=xxx
2.使用 url 重寫(至關於在 url 後面加入 jsessionid=xxx)安全

不管使用哪一種實現方式,最後均可以根據當前的客戶端請求來肯定當前請求的 request 在當前服務器中對應的 session,因此纔會有 HttpSession session = request.getSession(); 由於session的肯定必須從 request 裏面拿到它的 jsessionid 才能取到對應的 session。服務器

經過對瀏覽器和服務器交互的實現方式咱們知道了要記錄當前用戶的信息咱們須要在瀏覽器和服務器之間進行交互時傳遞一個 jsessionid 來標記當前用戶,因而咱們也能夠經過一樣的方式來記錄app和服務器之間的交互,也就是 app 用戶在登陸以後咱們都會給它一個 token 字符串來惟一標識當前用戶,這樣當下次這我的來的時候咱們就能夠根據 token 來取出當前用戶的數據信息(用戶我的信息、權限...),並且咱們能夠經過設定 token 的實效時間來控制用戶的在線時間cookie

二.實現方式

經過上面的分析咱們知道了,咱們只須要爲每個訪問用戶記錄下來一個惟一的 token 便可(不可重複),以後咱們就能夠根據用戶的 token來實現 app 端和服務器端之間的相對安全的交互了。session

使用 token 是爲了信息安全,咱們能夠根據設置 token 的失效時間來控制用戶是否是能夠對服務器進行訪問,並且能夠控制指定用戶的訪問保證用戶數據的安全性。app

3、知識延伸

php寫cookie是在瀏覽器請求時經過HTTP headers傳給瀏覽器的;
瀏覽器接收到以後在內部處理在瀏覽器所在地創建cookie;
js寫cookie應該就是直接操做本地的cookie文件了;網站

相關問題
php網站的session在服務器端是如何給客戶端分配sessionid的
當用戶瀏覽頁面觸發頁面的session 而且在 session 數組裏面 賦值 這個session文件在服務器是存放在 php.ini配置文件制定的位置嗎?
對於不一樣的來訪用戶 對 session文件的尋找(根據sessionid的匹配) 這些 工做是 php 的session機制實現的嗎?php程序員須要 瞭解這方面的細節嗎?

回答
在PHP.INI裏面有一項session.save_path,就是設置session保存位置的。
session是經過cookie來實現的,當瀏覽器訪問一個頁面時,php發如今cookie裏面沒有sessionid這個值,就會產生一個sessionid出來,同時對應一個服務器裏面的session文件。而後經過cookie傳給瀏覽器(經過cookie),下次瀏覽器再訪問頁面的時候,就會把這個sessionid給帶上(也是cookie),而後php經過這個cookie找到對應的session文件,讀取session的值。也就是說若是用戶關了cookie那session就用不了了。 以上就是session的原理。

sessionid做爲用戶的狀態判斷 在用戶每次請求頁面時 這個id會隨着 http 請求的頭描述 發送 !
在php程序裏面 是隻須要 開啓 session 而後在 session 全局數組 裏面 賦值 就能夠了?
存儲的位置 是由 php 來處理?
還有每次傳過來的sessionid 提供給 php 程序 讓 他 去尋找 對應此 id 的session文件 將裏面的數據讀到 session 數組裏面(依次來實現 不一樣的 用戶有 不一樣的 數據)?

追答:
這些過程你不用管,你只要知道,對於一個用戶,在session的有效時間內,你設置了$_SESSION['abc'] = 6;而後在其餘頁面讀取這個$_SESSION['abc']就會獲得6,中間怎麼處理sessionid什麼的,php都給你作好了。
你就把它想成一個超級全局變量那樣直接使用好了。

參考資料:
app 與服務器交互 token
Android客戶端與服務器交互中的token

相關文章
相關標籤/搜索