亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

android實現session保持簡要概述及實現

2020-04-11 12:30:42
字體:
來源:轉載
供稿:網友
在最近寫的一個Android中需要請求web服務器中的數據,有一個登錄Activity,登錄后會到MainActivity,這中間登錄和MainActivity都需要請求php的jsonapi,所以要在網絡請求中保持session的,研究了好半天才搞定。其實sesion在瀏覽器和web服務器直接是通過一個叫做name為sessionid的cookie來傳遞的,所以只要在每次數據請求時保持sessionid是同一個不變就可以用到web的session了,做法是第一次數據請求時就獲取sessionid的值并保存在一個靜態變量中,然后在第二次請求數據的時候要將這個sessionid一并放在Cookie中發給服務器,服務器則是通過這個sessionid來識別究竟是那個客戶端在請求數據的,在php中這個sessionid的名字叫做PHPSESSID。下面貼下代碼
復制代碼 代碼如下:

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.List;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.CookieStore;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.cookie.Cookie;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;
public class MyHttpClient implements InetConfig {
private DefaultHttpClient httpClient;
private HttpPost httpPost;
private HttpEntity httpEntity;
private HttpResponse httpResponse;
public static String PHPSESSID = null;
public LVHttpClient() {
}
public String executeRequest(String path, List<NameValuePair> params) {
String ret = "none";
try {
this.httpPost = new HttpPost(BASEPATH + path);
httpEntity = new UrlEncodedFormEntity(params, HTTP.UTF_8);
httpPost.setEntity(httpEntity);
//第一次一般是還未被賦值,若有值則將SessionId發給服務器
if(null != PHPSESSID){
httpPost.setHeader("Cookie", "PHPSESSID=" + PHPSESSID);
}
httpClient = new DefaultHttpClient();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
try {
httpResponse = httpClient.execute(httpPost);
if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
HttpEntity entity = httpResponse.getEntity();
ret = EntityUtils.toString(entity);
CookieStore mCookieStore = httpClient.getCookieStore();
List<Cookie> cookies = mCookieStore.getCookies();
for (int i = 0; i < cookies.size(); i++) {
//這里是讀取Cookie['PHPSESSID']的值存在靜態變量中,保證每次都是同一個值
if ("PHPSESSID".equals(cookies.get(i).getName())) {
PHPSESSID = cookies.get(i).getValue();
break;
}
}
}
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return ret;
}
}

其實web的原理都是一樣的,基于http協議的,那么如果網站不是php做的話,那個叫做Sessionid的Cookie可能叫做別的了,就不是PHPSESSID了,而是叫做別的名字了,這個可能要具體情況去查了。
其實不只是Android程序,其他任何程序需要這么用的時候只需要在http協議請求header里頭加上發送相應的SessionId就可以了。剛剛這種方法是可以幫助理解sessionid的,其實還有一種方法如果更通用的話,就可以將剛剛所有的Cookie每次都發回到服務器端,也就可以解決session保持的問題了,只是這樣可能會稍微大些網絡流量開銷而已。

這里看到一個SessionId的本質,順便mark一下。
SessionID的本質

一、客戶端用cookie保存了sessionID
客戶端用cookie保存了sessionID,當我們請求服務器的時候,會把這個sessionID一起發給服務器,服務器會到內存中搜索對應的sessionID,如果找到了對應的 sessionID,說明我們處于登錄狀態,有相應的權限;如果沒有找到對應的sessionID,這說明:要么是我們把瀏覽器關掉了(后面會說明為什 么),要么session超時了(沒有請求服務器超過20分鐘),session被服務器清除了,則服務器會給你分配一個新的sessionID。你得重 新登錄并把這個新的sessionID保存在cookie中。

在沒有把瀏覽器關掉的時候(這個時候假如已經把sessionID保存在cookie中了)這個sessionID會一直保存在瀏覽器中,每次請求的時候都會把這個sessionID提交到服務器,所以服務器認為我們是登錄的;當然,如果太長時間沒有請求服務器,服務器會認為我們已經所以把瀏覽器關掉了,這個時候服務器會把該sessionID從內存中清除掉,這個時候如果我們再去請求服務器,sessionID已經不存在了,所以服務器并沒有在內存中找到對應的 sessionID,所以會再產生一個新的sessionID,這個時候一般我們又要再登錄一次。

二、客戶端沒有用cookie保存sessionID
這 個時候如果我們請求服務器,因為沒有提交sessionID上來,服務器會認為你是一個全新的請求,服務器會給你分配一個新的sessionID,這就是 為什么我們每次打開一個新的瀏覽器的時候(無論之前我們有沒有登錄過)都會產生一個新的sessionID(或者是會讓我們重新登錄)。

當我們一旦把瀏覽器關掉后,再打開瀏覽器再請求該頁面,它會讓我們登錄,這是為什么?我們明明已經登錄了,而且還沒有超時,sessionID肯定還在服 務器上的,為什么現在我們又要再一次登錄呢?這是因為我們關掉瀏覽再請求的時候,我們提交的信息沒有把剛才的sessionID一起提交到服務器,所以服務器不知道我們是同一個人,所以這時服務器又為我們分配一個新的sessionID,打個比方:瀏覽器就好像一個要去銀行開戶的人,而服務器就好比銀行, 這個要去銀行開戶的人這個時候顯然沒有帳號(sessionID),所以到銀行后,銀行工作人員問有沒有帳號,他說沒有,這個時候銀行就會為他開通一個帳 號。所以可以這么說,每次打開一個新的瀏覽器去請求的一個頁面的時候,服務器都會認為,這是一個新的請求,他為你分配一個新的sessionID。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
人体精品一二三区| 精品偷拍各种wc美女嘘嘘| 亚洲成avwww人| 亚洲精品之草原avav久久| 欧美成人免费大片| 久久久久久97| 91国产精品91| 91久久在线播放| 久久人人爽人人爽爽久久| 色噜噜国产精品视频一区二区| 亚洲国产成人爱av在线播放| 日韩免费在线观看视频| 97精品在线观看| 日韩在线播放一区| 亚洲国产精品久久久| 欧美日韩国产中文字幕| 国产精品亚洲网站| 日韩av毛片网| 国产精国产精品| 欧美亚洲在线观看| 自拍亚洲一区欧美另类| 亚洲天堂影视av| 在线日韩av观看| 超碰91人人草人人干| 精品国产欧美成人夜夜嗨| 午夜精品免费视频| 欧美特级www| 欧美黑人国产人伦爽爽爽| 日本中文字幕不卡免费| 国产午夜精品一区二区三区| 69av成年福利视频| 国外视频精品毛片| 草民午夜欧美限制a级福利片| 亚洲男人天堂九九视频| 久久久av网站| 久久精品视频一| 欧美一级免费视频| 欧美日韩国产激情| 欧美大片va欧美在线播放| 色哟哟网站入口亚洲精品| 久久精视频免费在线久久完整在线看| 欧美成人免费va影院高清| 亚洲另类激情图| 97久久久免费福利网址| 在线性视频日韩欧美| 日韩资源在线观看| 精品在线观看国产| y97精品国产97久久久久久| 狠狠久久亚洲欧美专区| 91精品国产91久久久久久吃药| 国产免费一区二区三区香蕉精| 国产在线视频欧美| 日本亚洲欧洲色| 久久精品视频亚洲| 久久久91精品| 欧美猛交免费看| 日韩小视频网址| 国产大片精品免费永久看nba| 国产精品网站视频| 欧美日韩加勒比精品一区| 国产精品美女久久久免费| 92版电视剧仙鹤神针在线观看| 亚洲欧美成人精品| 青草成人免费视频| 久久网福利资源网站| 国产精品欧美一区二区三区奶水| 综合网中文字幕| 国产午夜精品一区理论片飘花| 日韩电影免费观看中文字幕| 亚洲人成电影网| 国产主播在线一区| 91日本在线视频| 日韩69视频在线观看| 97国产一区二区精品久久呦| 亚洲国产精久久久久久久| 亚洲片国产一区一级在线观看| 91精品国产自产91精品| 欧美性极品xxxx娇小| 精品亚洲一区二区三区在线观看| 亚洲福利视频专区| 国产成人a亚洲精品| 欧美精品www在线观看| 亚洲国产精品久久久久秋霞蜜臀| 国产精品啪视频| 亚洲女人被黑人巨大进入| 国产精品激情av电影在线观看| 国产精品美女在线| 日韩在线资源网| 久久国产精品电影| 亚洲国产精品va在看黑人| 成人激情视频免费在线| 国产一区二区三区中文| 精品女同一区二区三区在线播放| 精品国产一区久久久| 97在线看免费观看视频在线观看| 国产精品第2页| 国产福利精品av综合导导航| 欧美激情视频在线| 91国产视频在线播放| 26uuu另类亚洲欧美日本一| 美女福利精品视频| 亚洲а∨天堂久久精品9966| 成人h猎奇视频网站| 97香蕉超级碰碰久久免费的优势| 国产美女扒开尿口久久久| 亚洲系列中文字幕| 亚洲欧美国产日韩中文字幕| 亚洲黄色在线观看| 日韩欧美中文字幕在线观看| 久久九九精品99国产精品| 欧美猛交ⅹxxx乱大交视频| 国产在线精品成人一区二区三区| 国外色69视频在线观看| 日韩视频免费在线| 久久精品国产精品亚洲| 国产精品久久久999| 91精品啪在线观看麻豆免费| 精品国产一区二区三区四区在线观看| 亚洲一区国产精品| 日韩精品视频在线观看免费| 亚洲精品国产拍免费91在线| www高清在线视频日韩欧美| 色偷偷av亚洲男人的天堂| 欧美黑人极品猛少妇色xxxxx| 亚洲色图第一页| 91影视免费在线观看| 久久天天躁夜夜躁狠狠躁2022| 欧美激情一区二区三区在线视频观看| 午夜精品一区二区三区在线播放| 亚洲美女激情视频| 成人在线一区二区| 日本不卡高字幕在线2019| 成人免费视频网址| 日本精品视频网站| 日韩精品视频免费| 国产精品吊钟奶在线| 国产亚洲一区二区在线| 久久久久久久久网站| 国产精品久久久久久av| 国产综合在线观看视频| 亚洲色图50p| 丰满岳妇乱一区二区三区| 亚洲女人天堂视频| 日本一本a高清免费不卡| 狠狠色香婷婷久久亚洲精品| 国产a级全部精品| 日韩精品一区二区视频| 久久人91精品久久久久久不卡| 欧美有码在线观看| 亚洲国产精品美女| 亚洲精品福利免费在线观看| 国产精品免费网站| 韩国福利视频一区| 欧美激情视频三区| 亚洲色图av在线| 欧美日韩第一页| 国产精品久久二区| 午夜精品久久久久久久99黑人| 中文字幕日韩精品有码视频| 中文字幕日韩精品有码视频| 亚洲男女性事视频| 日韩中文字幕在线免费观看| 久久精品国产亚洲精品2020| 久99久在线视频|