Android Cookie共用到WebView避免再次登入(保持登入狀態),androidwebview

來源:互聯網
上載者:User

Android Cookie共用到WebView避免再次登入(保持登入狀態),androidwebview

最近在做項目時用到了webview開啟指定連結的網頁,可已經把webview設定了cookie但始終跳轉到登入頁面,這明顯是cookie沒有設定成功導致webview沒有將設定好的cookie發送出去……

12345 CookieSyncManager.createInstance(context);CookieManager cookieManager = CookieManager.getInstance();cookieManager.setAcceptCookie(true);cookieManager.setCookie(url, cookies);//cookies是在HttpClient中獲得的cookieCookieSyncManager.getInstance().sync();

通過上述代碼即可把事先儲存下來的cookie和指定的url關聯起來,達到保持登入的狀態,避免重複登入。遺憾的是,筆者在開發過程當中嚴格按照上述設定cookie的代碼來進行cookie的設定,可結果還是失敗,始終跳轉到登入頁提示登入。後來返回去查看了下Android API文檔,發現setCookie函數的兩個參數值說明如下:

public void setCookie(String url, String value)Added in API level 1

Sets a cookie for the given URL. Any existing cookie with the same host, path and name will be replaced with the new cookie. The cookie being set must not have expired and must not be a session cookie, otherwise it will be ignored.

 

url the URL for which the cookie is set
value the cookie as a string, using the format of the 'Set-Cookie' HTTP response header
value參數的作用是cookie值的字串形式,但格式一定要是http要求標頭格式"Set-Cookie"。

api文檔裡的這句話突然讓我驚醒,於是經過百度我查到了cookie的格式相關的文章,現摘抄如下:

原文連結:http://www.cnblogs.com/hdtianfu/archive/2013/05/30/3108295.html

Cookie相關的Http頭

    有連個Http頭部和Cookie有關:Set-Cookie和Cookie。    Set-Cookie由伺服器發送,它包含在響應請求的頭部中。它用於在用戶端建立一個Cookie    Cookie頭由用戶端發送,包含在HTTP請求的頭部中。 注意,只有cookie的domain和path與請求的URL匹配才會發送這個cookie。  Set-Cookie Header     Set-Cookie回應標頭的格式如下所示:         Set-Cookie: =[; =]...                    [; expires=][; domain=]                    [; path=][; secure][; httponly]     expires=: 設定cookie的有效期間,如果cookie超過date所表示的日期時,cookie將失效。                    如果沒有設定這個選項,那麼cookie將在瀏覽器關閉時失效。                    注意:date是格林威治時間(GMT),使用如下格式表示:                        DAY, DD MMM YYYY HH:MM:SS GMT                         DAY                            The day of the week (Sun, Mon, Tue, Wed, Thu, Fri, Sat).                        DD                            The day in the month (such as 01 for the first day of the month).                        MMM                            The three-letter abbreviation for the month (Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec).                        YYYY                            The year.                        HH                            The hour value in military time (22 would be 10:00 P.M., for example).                        MM                            The minute value.                        SS                            The second value.     domain= :     path=:                    註:臨時cookie(沒有expires參數的cookie)不能帶有domain選項。                    當用戶端發送一個http請求時,會將有效cookie一起發送給伺服器。                    如果一個cookie的domain和path參數和URL匹配,那麼這個cookie就是有效。

                    一個URL中包含有domain和path,可以參考http://www.w3school.com.cn/html/html_url.asp

     secure   : 表示cookie只能被發送到http伺服器。    httponly : 表示cookie不能被用戶端指令碼擷取到。

 

在程式中產生expires

    C的方式         time_t curTime = time(NULL);        tm * gmTime = gmtime(&curTime);         char strExperis[50];        strftime(strTimeBuf, 100, " %a, %d %b %Y %X GMT;", gmTime);      JavaScript的方式         var d = new Date();        var expires = d.toGMTString(); 

上述紅色加粗的文字更讓我確信了我的判斷,此時此刻的心情有多麼激動就不用說了,嘿嘿

於是,我在原來設定的cookie字串上加上了domain和path欄位,懷著期盼的心情run了下,哈哈,結果正確了,再也不用反覆登入了。

經過此次的bug解決,在編程中不能放過任何一個細節,要對每個運行細節都清清楚楚這樣才能避免盲目的去解決問題,最終浪費時間……

歡迎加入討論群討論:192209234


android用戶端登入工作階段保持,誰做過?

用cookie來實現,可以儲存登入時的cookie值,重寫webview,在實現載入頁面的方法裡面CookieManager處理下,就實現保持登陸回話了
 
Android httpClient 擷取cookie 後怎全域儲存?訪問webview綁定

cookie 都擷取到了, 儲存還不簡單????
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.