Android 分析android 客戶端保持session 不過時的方式

最近遇到個問題,和朋友討論小電商如何保持session不過時的問題,由於一般咱們不少客戶端是session是作成永久不過時的方式,只有從新登陸了,生成新的session給客戶端,電商由於同時若是幾個端一塊兒登陸,同時又購買同一個物品的時候,可能就會出現奇奇怪怪的問題,好比死鎖,數據金額可能異常各類問題,因此須要作一個session會過時的登陸方式,好比你ios登陸了,安卓端就須要被踢出來,總結和分析了看有以下三種方式:php

最後咱們默認是會選第二或第三種方式會比較可行。html

首先要知道session和cookie,session是存在服務器的的用來區分不一樣的會話的,是一種服務器機制,cookie 是客戶端登錄服務器之後,服務器須要爲某個客戶端的請求建立一個session的時候,服務器首先檢查這個客戶端的請求裏是否包含了一個session標識-稱爲session id,若是已經包含一個session id則說明之前已經爲此客戶建立過session,服務器就按照session id把這個session檢索出來使用.若是客戶請求不包含session id,則爲此客戶建立一個session而且生成一個與此session相關聯的session id,這個session id將在本次響應中返回給客戶端保存。

通常開源框架都會把這個session_id 存貯在cookie中,注意這個session_id是會話的標識。不要直接明文存儲。

迴歸正題,客戶端登陸時,將用戶名,密碼加密存貯在本地。同時將將cookie(或者session_id)保存起來,下次訪問服務器是,把它帶上,服務器端就能識別你已經登錄過了,可是咱們知道服務器的session 是有時間限制的,默認是若是客戶端20分鐘之內沒有訪問服務器,這個session_id就過時了,在服務器端不存在了,可是客戶端可能還認爲本身沒有掉線。怎麼解決這個問題呢?
方案一、將session 設置成擁擠不過時,這樣確實能夠解決客戶端的session 過時的問題,可是不推薦。這樣服務器端session一直不銷燬,會佔用內存,愈來愈來越多。
方案2.心跳機制。這是最多見的客戶端保持會話不過時的方法。簡單的作法就是寫個定時器,美隔幾分鐘發送廣播,收到廣播後收客戶端去訪問服務器。固然也有問題。這個方式。舉個例子說下他的問題吧。好比雖然寫了個定時器去訪問服務器,可是若是這段時間(假如30分鐘),客戶端正好把網絡給關了,31分鐘後客戶端又打開了網絡鏈接,因爲30分鐘沒有訪問服務器 你調用A()方法的時候返回的結果是{「error」:"login"},而後你根據結果再去調用B() 登錄方法,登錄成功後,在自動A()方法。這樣的話,每次訪問網絡都要更這個B()登錄方法,代碼臃腫。並且費電。
方法3:服務器自動登登錄的方法
客戶端訪問服務器事,同時帶着用戶名,和密碼,還有cookie(session_id),服務器先判斷session_id 是否過時,若是過時,在判讀參數中有用戶名和密碼,若是有,就在調用一下登陸的方法,登陸成功後,就接着操做。。這種方法的缺點就是每次都要帶個帳號和密碼,稍微有點耗流量。ios

參考原文地址:http://www.th7.cn/Program/Android/201502/392240.shtml服務器

相關文章
相關標籤/搜索