<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      安卓筆記俠

      專注安卓開發(fā)

      導(dǎo)航

      Cookie管理 WebView同步

      NoHttp的Cookie管理原理

      在文檔的初始化配置一章講了NoHttp如何配置或者禁用cookie自動管理。

      NoHttp的Cookie自動維護(hù),嚴(yán)格遵守Http協(xié)議,即區(qū)分臨時Cookie和有效期Cookie。

      • 臨時Cookie在本次App運行期內(nèi)一直有效,直到App被殺死即被清除。
      • 有效期Cookie會帶有一個過期時間,不論App是否被殺死過,這個Cookie在到期時會被自動清除。

      關(guān)于Session的維持登錄

      Session是對于服務(wù)端來說的,客戶端是沒有Session一說的。Session是服務(wù)器在和客戶端建立連接時添加客戶端連接標(biāo)志,最終會在服務(wù)器軟件(Apache、Tomcat、JBoss)轉(zhuǎn)化為一個臨時Cookie發(fā)送給給客戶端,當(dāng)客戶端第一請求時服務(wù)器會檢查是否攜帶了這個Session(臨時Cookie),如果沒有則會添加Session,如果有就拿出這個Session來做相關(guān)操作。

      綜上所述Session也就是客戶端在一次運行期內(nèi)一直有效,客戶端被重啟或者殺死時這個Session轉(zhuǎn)化來的臨時Cookie即被清除,下次客戶端啟動后請求服務(wù)器時會重新有一個新的Session。

      有寫開發(fā)者是用Session維持App端用戶登錄狀態(tài)的,根據(jù)上述描述,App重啟后上次登錄時的Session就失效了,此時要想維護(hù)Session的持續(xù)有效有兩個辦法:

      一、每次啟動App就登錄一次

      第一個辦法很土,不安全,但很有效。當(dāng)用戶登錄成功后,保存用戶的帳號、密碼、是否登錄狀態(tài)在本地(記得加密),然后在APP每次重啟時檢查用戶是否登錄,如果是登錄,那么后臺自動調(diào)用登錄接口登錄一次,就可以拿到登錄的有效Cookie。

      二、用NoHttp的Cookie管理監(jiān)聽

      第二個辦法相對安全,建議采用第二種辦法。NoHttp在初始化的時候可以配置一個CookieStore,我們可以給這個CookieStore設(shè)置一個Cookie管理的監(jiān)聽,當(dāng)Cookie被保存時設(shè)置Cookie的有效期為永久:

      public class App extends Application {
      
          private static App mainCourseInstance;
      
          @Override
          public void onCreate() {
              super.onCreate();
              NoHttp.initialize(this, new NoHttp.Config()
                      .setCookieStore(new DBCookieStore(this).setCookieStoreListener(mListener))
              );
          }
      
          /**
           * Cookie管理監(jiān)聽。
           */
          private DBCookieStore.CookieStoreListener mListener = new DBCookieStore.CookieStoreListener() {
              @Override
              public void onSaveCookie(URI uri, HttpCookie cookie) { // Cookie被保存時被調(diào)用。
                  // 1. 判斷這個被保存的Cookie是我們服務(wù)器下發(fā)的Session。
                  // 2. 這里的JSessionId是Session的name,
                  //    比如java的是JSessionId,PHP的是PSessionId,
                  //    當(dāng)然這里只是舉例,實際java中和php不一定是這個,具體要咨詢你們服務(wù)器開發(fā)人員。
                  if("JSessionId".equals(cookie.getName())) {
                      // 設(shè)置有效期為最大。
                      cookie.setMaxAge(HeaderUtil.getMaxExpiryMillis());
                  }
              }
      
              @Override
              public void onRemoveCookie(URI uri, HttpCookie cookie) {// Cookie被移除時被調(diào)用。
              }
          }
      }

      NoHttp同步Cookie到原生的WebView

      這里推薦一個方法,我們可以繼承系統(tǒng)的WebView,然后設(shè)置一些必要屬性后,重寫WebView#loadUrl(String, Map<String, String>)方法。

      第一步,繼承WebView,重寫loadUrl(String, Map<String, String>)方法:

      ublic class MyWebView extends android.webkit.WebView {
      
          public MyWebView(Context context) {
              super(context);
          }
      
          public MyWebView(Context context, AttributeSet attrs) {
              super(context, attrs);
          }
      
          public MyWebView(Context context, AttributeSet attrs, int defStyleAttr) {
              super(context, attrs, defStyleAttr);
          }
          
          @Override
          public void loadUrl(String url, Map<String, String> httpHeader) {
              super.loadUrl(url, httpHeader);
          }
      }

      第二步,給loadUrl(String, Map<String, String>)方法添加具體添加自定義頭和同步Cookie的代碼:

      @SuppressWarnings("deprecation")
      @SuppressLint("NewApi")
      @Override
      public void loadUrl(String url, Map<String, String> httpHeader) {
          if (httpHeader == null) {
              httpHeader = new HashMap<>();
          }
      
          // 這里你還可以添加一些自定頭。
          httpHeader.put("AppVersion", "1.0.0"); // 比如添加app版本信息,當(dāng)然實際開發(fā)中要自動獲取哦。
      
          URI uri = null;
          try {
              uri = new URI(url);
          } catch (URISyntaxException e) {
              e.printStackTrace();
          }
          if (uri != null) {
              java.net.CookieStore cookieStore = NoHttp.getCookieManager().getCookieStore();
              List<HttpCookie> cookies = cookieStore.get(uri);
      
              // 同步到WebView。
              android.webkit.CookieManager webCookieManager = android.webkit.CookieManager.getInstance();
              webCookieManager.setAcceptCookie(true);
              for (HttpCookie cookie : cookies) {
                  String cookieUrl = cookie.getDomain();
                  String cookieValue = cookie.getName() + "=" + cookie.getValue()
                              + "; path=" + cookie.getPath()
                              + "; domain=" + cookie.getDomain();
                  
                  webCookieManager.setCookie(cookieUrl, cookieValue);
              }
      
              if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
                  webCookieManager.flush();
              } else {
                  android.webkit.CookieSyncManager.createInstance(NoHttp.getContext()).sync();
              }
          }
          super.loadUrl(url, httpHeader);
      }

      NoHttp同步Cookie到騰訊X5 WebView

      很多人在使用它騰訊提供的X5服務(wù)器,來替代Android原生的WebView,如果你正是使用騰訊X5內(nèi)核的話,同樣NoHttp也支持Cookie同步。

      步驟和上面原生WebView沒區(qū)別,但是要注意幾點:

      1. 繼承不是系統(tǒng)的android.webkit.WebView,而是com.tencent.smtt.sdk.WebView
      2. 同步到X5內(nèi)核時不再是android.webkit.CookieManagerr,而是com.tencent.smtt.sdk.CookieManager
      3. 同步到X5內(nèi)核時不再是android.webkit.CookieSyncManager,而是com.tencent.smtt.sdk.CookieSyncManager

      具體代碼如下:

       1 ublic class MyWebView extends com.tencent.smtt.sdk.WebView {
       2 
       3     public MyWebView(Context context) {
       4         super(context);
       5     }
       6 
       7     public MyWebView(Context context, AttributeSet attrs) {
       8         super(context, attrs);
       9     }
      10 
      11     public MyWebView(Context context, AttributeSet attrs, int defStyleAttr) {
      12         super(context, attrs, defStyleAttr);
      13     }
      14 
      15     @SuppressWarnings("deprecation")
      16     @SuppressLint("NewApi")
      17     @Override
      18     public void loadUrl(String url, Map<String, String> httpHeader) {
      19         if (httpHeader == null) {
      20             httpHeader = new HashMap<>();
      21         }
      22 
      23         // 這里你還可以添加一些自定頭。
      24         httpHeader.put("AppVersion", "1.0.0"); // 比如添加app版本信息,當(dāng)然實際開發(fā)中要自動獲取哦。
      25 
      26         URI uri = null;
      27         try {
      28             uri = new URI(url);
      29         } catch (URISyntaxException e) {
      30             e.printStackTrace();
      31         }
      32         if (uri != null) {
      33             java.net.CookieStore cookieStore = NoHttp.getCookieManager().getCookieStore();
      34             List<HttpCookie> cookies = cookieStore.get(uri);
      35 
      36             // 同步到騰訊X5 WebView。
      37             com.tencent.smtt.sdk.CookieManager webCookieManager = com.tencent.smtt.sdk.CookieManager.getInstance();
      38             webCookieManager.setAcceptCookie(true);
      39             for (HttpCookie cookie : cookies) {
      40                 String cookieUrl = cookie.getDomain();
      41                 String cookieValue = cookie.getName() + "=" + cookie.getValue()
      42                         + "; path=" + cookie.getPath()
      43                         + "; domain=" + cookie.getDomain();
      44 
      45                 webCookieManager.setCookie(cookieUrl, cookieValue);
      46             }
      47             com.tencent.smtt.sdk.CookieSyncManager.createInstance(NoHttp.getContext()).sync();
      48         }
      49         super.loadUrl(url, httpHeader);
      50     }

       

      posted on 2018-05-11 21:09  安卓筆記俠  閱讀(2410)  評論(0)    收藏  舉報

      主站蜘蛛池模板: 无套内谢少妇毛片在线| 亚洲欧美人成人让影院| 亚洲中文字幕第二十三页| 无码人妻人妻经典| 久久久国产一区二区三区四区小说| 四虎国产精品永久入口| 欧美日韩欧美| 疯狂做受XXXX高潮国产| 常宁市| 国产精品成熟老女人| 亚洲欧美综合精品二区| 亚洲a∨国产av综合av下载| 无码视频一区二区三区| 伊大人香蕉久久网欧美| 中国亚州女人69内射少妇| 亚洲精品国产自在久久| 你懂的一区二区福利视频| 中文字幕av一区二区| 粉嫩一区二区三区国产精品| 久久天天躁狠狠躁夜夜躁| 五月天天天综合精品无码| 玛多县| 天天爽夜夜爱| 女同AV在线播放| 欧美性猛交xxxx免费看| 麻豆亚州无矿码专区视频| 十八禁在线观看视频播放免费| 亚洲欧美综合人成在线| 69天堂人成无码免费视频| 精品亚洲女同一区二区| 1区2区3区4区产品不卡码网站| 永久免费精品性爱网站| 特级av毛片免费观看| 国产高潮国产高潮久久久| 一区二区三区在线色视频| 欧美极品色午夜在线视频| 江川县| 亚洲国产成人无码电影| 国产福利高颜值在线观看| 最新中文字幕国产精品| 久久三级中文欧大战字幕|