Android 에서 webView 는 H5 바 인 딩 쿠키 인 스 턴 스 를 불 러 옵 니 다.

프로필:
나 는 최근 에 프로젝트 를 할 때 이런 상황 을 만 났 다.
1.WebView 로 H5 로그 인 등록 을 실현 해 야 합 니 다.
2.대회 신청 은 H5 로 한다.이러한 상황 에서 저 는 쿠키 를 서버 에 전송 하여 현재 계 정 이 로그 인 에 성 공 했 는 지 판단 하도록 해 야 합 니 다.몇 가지 자 료 를 찾 아 본 후에 마침내 해결 되 었 다.
1.불 러 온 링크 에 쿠키 설정

 private void syncCookie(String url) {
 try {
  CookieSyncManager.createInstance(mWvSignUp.getContext());//    cookie   
  CookieManager cookieManager = CookieManager.getInstance();
  cookieManager.setAcceptCookie(true);
  cookieManager.removeSessionCookie();//      cookie
  cookieManager.removeAllCookie();
  StringBuilder sbCookie = new StringBuilder();//      cookie   ,       ,      http Cookie   
  sbCookie.append(_mApplication.getUserInfo().getSessionID());//  sessionId
  sbCookie.append(String.format(";domain=%s", ""));
  sbCookie.append(String.format(";path=%s", ""));
  String cookieValue = sbCookie.toString();
  cookieManager.setCookie(url, cookieValue);// url  cookie
  CookieSyncManager.getInstance().sync();//  cookie
 } catch (Exception e) {
  e.printStackTrace();
 }
 }
2.webview 의 loadurl 을 실행 하기 전에 먼저 실행 합 니 다.

//   cookie
syncCookie(mUrl);
3.주의사항
여기 서 주의해 야 할 것 은 쿠키 를 설정 한 후에 다음 과 같은 속성 을 설정 할 수 없습니다.그렇지 않 으 면 쿠키 는 무효 입 니 다.(이러한 속성 뿐만 아니 라 예 를 들 어 loadurl 을 실행 하기 전에 쿠키 를 설정 하 는 것 이 가장 좋 습 니 다)

 mWvSignUp.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
  mWvSignUp.getSettings().setJavaScriptEnabled(true);
  mWvSignUp.getSettings().setDatabaseEnabled(true);
  mWvSignUp.getSettings().setDomStorageEnabled(true);
4.일부 ajax 요청 은 쿠키 를 가 져 와 야 합 니 다.어떻게 합 니까?
프로젝트 에 서 는 일부 클릭 이벤트 가 ajax 요청 으로 이 루어 질 때 도 있 으 며 로그 인 여 부 를 판단 해 야 하기 때 문 입 니 다.브 라 우 저 는 쿠키 를 자동 으로 저장 하고 서버 에 전송 합 니 다.그러나 안 드 로 이 드 는 그렇지 않 습 니 다.이 요청 을 차단 하고 쿠키 를 추가 해 야 합 니 다.
5.0 이하:

  mWvSignUp.setWebViewClient(new WebViewClient() {
   /**
    * 5.0  
    * @param view
    * @param url
    * @return
    */
   @Override
   public WebResourceResponse shouldInterceptRequest(WebView view, String url) {
    syncCookie(url);
    return super.shouldInterceptRequest(view, url);//   cookie url        
   }
 });
5.0 이상:

 mWvSignUp.setWebViewClient(new WebViewClient() {
 @SuppressLint("NewApi")
 @Override
 public WebResourceResponse shouldInterceptRequest(WebViewview, WebResourceRequest request) {
 String url = request.getUrl().toString();
 syncCookie(url); 
 return super.shouldInterceptRequest(view, url);//   5.0             ,          4.0      
 });
주:여기 서 게 으 름 피 우 는 방식 을 사 용 했 습 니 다.관심 있 는 친구 가 있 으 면 다음 과 같은 방법 으로 쿠키 를 설정 할 수 있 습 니 다.

 mWvSignUp.setWebViewClient(new WebViewClient() { 
 
 @SuppressLint("NewApi")
 
 @Override
 
 public WebResourceResponse shouldInterceptRequest(WebViewview, WebResourceRequest request) {  
 Map<String,String> requestHead = request.getRequestHeaders();//    
  return super.shouldInterceptRequest(view,new WebResourceRequest() { //        ,   ,     cookie  requestHeader 
  @Override
  public Uri getUrl() {
   return null;
  }
 
  @Override
  public boolean isForMainFrame() {
   return false;
  }
 
  @Override
  public boolean hasGesture() {
   return false;
  }
 
  @Override
  public String getMethod() {
   return null;
  }
 
  @Override
  public Map<String, String>getRequestHeaders() {
   return null;
  }
 }
 })}
 });
결론:webView 는 아직도 우리 가 탐색 해 야 할 기능 이 많 습 니 다.좋 은 제안 이 있 으 면 댓 글 에 저 에 게 제출 하고 싶 습 니 다.여러분 께 참고 가 되 셨 으 면 좋 겠 고 많은 응원 부 탁 드 리 겠 습 니 다.

좋은 웹페이지 즐겨찾기