iOS H5頁面中請求重定向(302)問題

使用WKWebView


問題描述:iOS 通過WKWebView加載H5頁面,H5頁面中發(fā)送了post請求數(shù)據(jù)(此請求服務(wù)器會(huì)驗(yàn)證是否登錄,判斷cookie中是否存在sessionID),由于登錄信息也就是sessionID沒有傳到H5頁面(H5頁面獲取不到此sessionID,cookie為空),所以服務(wù)器判斷該用戶未登錄,會(huì)重定向到登錄界面,iOS會(huì)攔截該請求,所以導(dǎo)致請求出錯(cuò)。安卓這丫的沒這問題。


請求302

跨目錄獲取不到cookie

解決方法:iOS通過注入JS代碼到H5頁面,把sessionID賦值到H5頁面的cookie中。記得cookie要設(shè)置path路徑到根目錄下—document.cookie=name+'='+value+';path=/;expires='+oDate;不然其他目錄下的請求訪問cookie。

document.cookie=name+'='+value+';path=/;expires='+oDate;

代碼可寫在下面方法中:

// 導(dǎo)航完成時(shí)

- (void)webView:(WKWebView *)webView didFinishNavigation:(null_unspecified WKNavigation *)navigation {

或者一開始配置的時(shí)候就注冊js代碼

WKWebViewConfiguration *config = [[WKWebViewConfiguration alloc] init];

[config.userContentController addUserScript:[[WKUserScript alloc] initWithSource:[self setCookieToJS] injectionTime:(WKUserScriptInjectionTimeAtDocumentStart) forMainFrameOnly:YES]]

//為wkwebview 的H5代碼注入js代碼賦值cookie

-(NSString *)setCookieToJS{ ? ?

????//取出cookie ? ?

????NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage]; ?

?????for (NSHTTPCookie *cookie in cookieStorage.cookies) { ? ? ? ?

????????????NSLog(@"name = %@ value = %@",cookie.name,cookie.value); ? ?

????} ? ?

????//js函數(shù) ? ?

????NSString *JSFuncString = ? ? @"function setCookie(name,value,expires)\ ? ?

????{\ ? ? var oDate=new Date();\ ? ?

????oDate.setDate(oDate.getDate()+expires);\ ? ?

????document.cookie=name+'='+value+';path=/;expires='+oDate;\ ? ?

????}\ ? ?

????function getCookie(name)\ ? ?

????{\ ? ?

????var arr = document.cookie.match(new RegExp('(^| )'+name+'=([^;]*)(;|$)'));\ ? ?

????if(arr != null) return unescape(arr[2]); return null;\ ? ?

????}\ ? ?

????function delCookie(name)\ ? ?

????{\ ? ?

????var exp = new Date();\ ? ?

????exp.setTime(exp.getTime() - 1);\ ? ?

????var cval=getCookie(name);\ ? ?

????if(cval!=null) document.cookie= name + '='+cval+';expires='+exp.toGMTString();\ ? ?

????}";

????//拼湊js字符串? ??

????NSMutableString *JSCookieString = JSFuncString.mutableCopy; ? ?

????for (NSHTTPCookie *cookie in cookieStorage.cookies) { ? ? ? ?

????????//判斷此cookie屬于當(dāng)前url ? ? ? ?

????????if([cookie.name isEqualToString:@"JSESSIONID"] && [_urlString containsString:cookie.domain] ){ ? ? ? ? ? ?

????????????NSString *excuteJSString = [NSString stringWithFormat:@"setCookie('%@', '%@', 1);", cookie.name, cookie.value]; ? ? ? ? ? ?

????????????[JSCookieString appendString:excuteJSString]; ? ? ? ?

????????} ? ?

????} ? ?

????return JSCookieString;

}


創(chuàng)建WKWebView的時(shí)候要配置cookie,傳cookie

NSMutableDictionary *cookieDic = [NSMutableDictionary dictionary]; ? ?

NSMutableString *cookieValue = [NSMutableString stringWithFormat:@""]; ? ?

NSHTTPCookieStorage *cookieJar = [NSHTTPCookieStorage sharedHTTPCookieStorage];? ? ? ?

? // cookie重復(fù),先放到字典進(jìn)行去重,再進(jìn)行拼接 ? ?

for (NSString *key in cookieDic) { ? ? ? ?

????NSString *appendString = [NSString stringWithFormat:@"%@=%@", key, [cookieDic valueForKey:key]]; ? ? ? ? [cookieValue appendString:appendString]; ? ?

} ?? ? ? ?

NSURL *url = [NSURL URLWithString:_urlString]; ? ?

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; ? ?

[request addValue:cookieValue forHTTPHeaderField:@"Cookie"]; ? ?

[request addValue:@"app" forHTTPHeaderField:@"requestType"]; ?? ? ? ?

[self.webView loadRequest:request]; ? ?

self.webView.navigationDelegate = self; ? ?

self.webView.UIDelegate = self;

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 公司開始讓做一個(gè)新iOS項(xiàng)目,由于蘋果的更新需要每次發(fā)版本審核,沒法像服務(wù)器一樣實(shí)時(shí)更新,技術(shù)部就討論出原生+HT...
    奶茶007閱讀 1,871評論 16 9
  • 轉(zhuǎn)載:http://www.cnblogs.com/NSong/p/6489802.html 導(dǎo)語 WKWebVi...
    李小威閱讀 4,979評論 8 9
  • 轉(zhuǎn)載鏈接:騰訊Bugly 導(dǎo)語 WKWebView 是蘋果在 WWDC 2014 上推出的新一代 webView ...
    Jelly_沫閱讀 2,928評論 0 3
  • WKWebView 是蘋果在 WWDC 2014 上推出的新一代 webView 組件,用以替代 UIKit 中笨...
    Aiana閱讀 4,810評論 1 8
  • 前言 關(guān)于UIWebView的介紹,相信看過上文的小伙伴們,已經(jīng)大概清楚了吧,如果有問題,歡迎提問。 本文是本系列...
    CoderLF閱讀 9,353評論 2 12

友情鏈接更多精彩內(nèi)容