許多人在學習Android時,都會完成音樂播放器這個項目,因為音樂播放器項目將運行Android的四個組件,今天跟著武林技術頻道小編來進入下文看看android實現session的簡介吧!
在最近寫的一個Android中需要請求web服務器中的數據,有一個登錄Activity,登錄后會到MainActivity,這中間登錄和MainActivity都需要請求php的jsonapi,所以要在網絡請求中保持session的,研究了好半天才搞定。其實sesion在瀏覽器和web服務器直接是通過一個叫做name為sessionid的cookie來傳遞的,所以只要在每次數據請求時保持sessionid是同一個不變就可以用到web的session了,做法是第一次數據請求時就獲取sessionid的值并保存在一個靜態變量中,然后在第二次請求數據的時候要將這個sessionid一并放在Cookie中發給服務器,服務器則是通過這個sessionid來識別究竟是那個客戶端在請求數據的,在php中這個sessionid的名字叫做PHPSESSID。下面貼下代碼
其實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。
上述就是武林技術頻道小編為大家分享的android實現session的簡介,希望對想要了解這方面信息的人有所幫助。
新聞熱點
疑難解答