<thead id="tzpj7"></thead>

        <sub id="tzpj7"></sub>
        <address id="tzpj7"></address>

            <sub id="tzpj7"></sub>

                iOS 和 H5 页面交互(WKWebview 和 UIWebview cookie 设置)

                iOS 和 H5 页面交互(WKWebview 和 UIWebview cookie 设置)

                主要记录关于cookie相关的坑

                1. UIWebview

                1. UIWebview 相对比较简单 直接通过 NSHTTPCookieStorage 设置cookie就能实现。

                代码部分

                ```
                  NSURL *cookieHost = [NSURL URLWithString:self.domain];
                // 设定 cookie
                NSHTTPCookie *cookie = [NSHTTPCookie cookieWithProperties:
                                        [NSDictionary dictionaryWithObjectsAndKeys:
                                         [cookieHost host], NSHTTPCookieDomain,
                                         [cookieHost path], NSHTTPCookiePath,
                                         self.cookieKey,  NSHTTPCookieName,
                                         self.cookieValue, NSHTTPCookieValue,
                                         nil]];
                // 加入cookie
                [[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookie];
                ```

                2. 如果在第一次请求的时候需要在HTTPRequest 通过setValueForKey设置 HeaderValue

                2. WKWebview

                在使用WKWebview的时候也是需要分两种情况传递:

                • 1.HTTPRequest 请求URL的时候携带 如后端PHP获取 cookie
                • 2.注入js 目的是让前端从页面里边获取到cookie 可以通过在document.cookie 设置 通过WKWebview 初始化时候把js传递过去

                  `WKUserScript * cookieScript = [[WKUserScript alloc] initWithSource: cookieValue injectionTime:WKUserScriptInjectionTimeAtDocumentStart forMainFrameOnly:NO];

                • 3.NSHTTPCookieStorage 似乎不携带没问题,因为我们目前没有通过这个传递cookie

                网上参考别人的方法是要实现下面几个步骤,但是我们项目并没有按照这三种必要方式,但是可以做个参考:

                WKWebview三个处理步骤: (1)iOS11,WKHTTPCookieStore 直接传递。(如果是只支持iOS11,下面两步可以不做); (2)iOS8-iOS10, js注入; (3)PHP携带cookie方式

                相关代码

                #pragma mark - WKWebview
                // iOS11
                - (void)setWkCookie:(WKWebView *)wkWebview completionHandler:(nullable void (^)(void))comple {
                    
                    NSURL *cookieHost = [NSURL URLWithString:self.domain];
                    // 设定 cookie
                    NSHTTPCookie *cookie = [NSHTTPCookie cookieWithProperties:
                                            [NSDictionary dictionaryWithObjectsAndKeys:
                                             [cookieHost host], NSHTTPCookieDomain,
                                             [cookieHost path], NSHTTPCookiePath,
                                             self.cookieKey,  NSHTTPCookieName,
                                             self.cookieValue, NSHTTPCookieValue,
                                             //                             [NSDate dateWithTimeIntervalSinceNow:30*60*60],NSHTTPCookieExpires,
                                             nil]];
                    
                    // 加入cookie
                    //发送请求前插入cookie;
                    if (@available(iOS 11.0, *)) {
                        WKHTTPCookieStore *cookieStore = wkWebview.configuration.websiteDataStore.httpCookieStore;
                        [cookieStore setCookie:cookie completionHandler:^{
                            
                            comple?comple():nil;
                        }];
                    } else {
                        
                        
                    }
                
                }
                
                // JS携带cookie的形式
                - (void)setWkJsCookie:(WKUserContentController *)userContentController {
                    // 单个cookie,多个的话,再加上document.cookie ='%@=%@';一次
                    NSString *cookieStr = [NSString stringWithFormat:@"document.cookie ='%@=%@';",self.cookieKey,self.cookieValue];
                    WKUserScript * cookieScript = [[WKUserScript alloc] initWithSource: cookieStr injectionTime:WKUserScriptInjectionTimeAtDocumentStart forMainFrameOnly:NO];
                    [userContentController addUserScript:cookieScript];
                }
                
                // PHP携带cookie的形式
                - (void)setWkPHPCookie:(NSMutableURLRequest *)request {
                    //通过host关联cookie。
                    NSMutableDictionary *cookieDic = [NSMutableDictionary dictionary];
                    NSMutableString *cookieValue = [NSMutableString stringWithFormat:@""];
                    NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
                    for (NSHTTPCookie *cookie in [cookieStorage cookies]) {
                        [cookieDic setObject:cookie.value forKey:cookie.name];
                    }
                    if ([cookieDic objectForKey:[CookieManager shareInstance].cookieKey]) {
                        [cookieDic removeObjectForKey:[CookieManager shareInstance].cookieKey];
                    }
                    
                    // cookie重复,先放到字典进行去重,再进行拼接
                    for (NSString *key in cookieDic) {
                        NSString *appendString = [NSString stringWithFormat:@"%@=%@;", key, [cookieDic valueForKey:key]];
                        [cookieValue appendString:appendString];
                    }
                    
                    [cookieValue appendString:[NSString stringWithFormat:@"%@ = %@;",self.cookieKey,self.cookieValue]];
                    [request addValue:cookieValue forHTTPHeaderField:@"Cookie"];
                }
                #pragma mark - Webview
                // 客户端添加cookie
                - (void)setWebCookie {
                    
                    NSURL *cookieHost = [NSURL URLWithString:self.domain];
                    // 设定 cookie
                    NSHTTPCookie *cookie = [NSHTTPCookie cookieWithProperties:
                                            [NSDictionary dictionaryWithObjectsAndKeys:
                                             [cookieHost host], NSHTTPCookieDomain,
                                             [cookieHost path], NSHTTPCookiePath,
                                             self.cookieKey,  NSHTTPCookieName,
                                             self.cookieValue, NSHTTPCookieValue,
                                             nil]];
                    // 加入cookie
                    [[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookie];
                }

                2.WKWebview 有跨域问题

                * 最后要说的是以上方法如果 考虑跨域问题的话,UIWebView 是不会出现的,但是WKWebview是不允许跨域的,这个也是苹果考虑到安全性的方面,但是是可以处理的,目前我们的方案是以下两种

                1.前端通过获取到cookie后 重新种植一下cookie ,通过 .xxx.com 模糊种植

                2.让后端来处理,可以把用户相关信息如 uid传递给前端。

                相关文章
                相关标签/搜索
                管家婆中特王中王开+奖结果出 郓城县| 台东县| 巧家县| 镇江市| 平果县| 塔城市| 舒城县| 峡江县| 山阴县| 三都| 北辰区| 孝感市| 锦州市| 泸溪县| 五常市| 息烽县| 淅川县| 呈贡县| 东港市| 顺昌县| 峡江县| 永康市| 庐江县| 灵寿县| 江永县| 象山县| 屏边| 称多县| 江山市| 张家界市| 淳安县| 衡东县| 文昌市| 开江县| 西畴县| 韶山市| 胶南市| 南平市| 梅河口市| 揭东县| 镇平县| 积石山| 长汀县| 天气| 新津县| 武安市| 土默特右旗| 凤凰县| 文昌市| 鲜城| 海安县| 吉林省| 盐山县| 土默特左旗| 新郑市| 会宁县| 外汇| 凉山| 松潘县| 开化县| 井研县| 赤峰市| 邹平县| 北川| 平湖市| 庆元县| 太康县| 阿城市| 崇礼县| 洛扎县| 南昌市| 大余县| 唐山市| 丰都县| 孟连| 银川市| 凤台县| 仙桃市| 思南县| 儋州市| 和田市| 客服| 瑞昌市| 金湖县| 五家渠市| 济南市| 广宗县| 神农架林区| 如皋市| 乃东县| 颍上县| 阿克苏市| 景宁| 甘孜| 内乡县| 平武县| 桂阳县| 尼玛县| 平乐县| 当涂县| 四平市| 德化县| 调兵山市| 吉安市| 察哈| 奎屯市| 宜昌市| 徐水县| 深圳市| 道真| 得荣县| 承德市| 江源县| 襄汾县| 法库县| 明水县| 海宁市| 辽宁省| 东乌| 吉林省| 刚察县| 十堰市| 宁夏| 宁化县| 永川市| 页游| 洪雅县| 白银市| 元氏县| 余姚市| 开封市| 唐河县| 宿迁市| 榆社县| 榆社县| 阿勒泰市| 姜堰市| 方城县| 安图县| 曲松县| 宣化县| 铜陵市| 咸丰县| 黄龙县| 黔西| 江口县| 吉木萨尔县| 新乡市| 广水市| 马尔康县| 黎川县| 宁城县| 蒲江县| 泾阳县| 南昌市| 永清县| 五家渠市| 河北区| 浦县| 辰溪县| 乃东县| 永年县| 大港区| 临朐县| 白河县| 额敏县| 密云县| 贡山| 高安市| 克东县| 磐安县| 玛纳斯县| 上饶市| 隆化县| 汉源县| 盐城市| 柳州市| 襄垣县| 武夷山市| 方山县| 鄄城县| 汨罗市| 晋宁县| 芦山县| 贞丰县| 桑植县| 定陶县| 龙南县| 刚察县| 汪清县| 察隅县| 通许县| 云林县| 驻马店市| 孝感市| 永寿县| 阿图什市| 石渠县| 贵南县| 祁连县| 皋兰县| 社会| 开封县| 宜黄县| 磴口县| 汉阴县| 崇阳县| 宝应县| 什邡市| 鄂托克前旗| 泸西县| 朝阳县| 吴江市| 汤阴县| 耒阳市| 云南省| 申扎县| 班玛县| 大姚县| 咸阳市| 会东县| 长岭县| 巴里| 塔城市| 舞阳县| 五寨县| 永顺县| 松潘县| 景宁| 本溪| 巴塘县| 聂荣县| 汉阴县| 鞍山市| 顺平县| 江都市| 松江区| 额敏县| 小金县| 西乌珠穆沁旗| 忻城县| 克什克腾旗| 深州市| 秭归县| 扶风县| 塘沽区| 出国| 房山区| 通城县| 五台县| 咸阳市| 承德市| 巴彦淖尔市| 萝北县| 绥滨县| 庆元县| 新民市| 明星| 海城市| 谢通门县| 法库县| 彭山县| 九台市| 织金县| 和田县| 玉门市| 绥芬河市| 巍山| 汝州市| 晋江市| 锦州市| 从江县| 齐河县| 奈曼旗| 贵阳市| 七台河市| 万山特区| 四子王旗| 商水县| 西城区| 石城县| 柳州市| 沙田区| 呼和浩特市| 宜黄县| 郴州市| 宁强县| 汶川县| 乐至县| 元阳县| 色达县| 泸州市| 睢宁县| 龙江县| 福贡县| 利川市| 呼和浩特市| 山丹县| 察隅县| 农安县| 隆安县| 隆子县| 宁蒗| 麻栗坡县| 巨鹿县| 北京市| 新竹县| 南投县| 南澳县| 抚远县| 无锡市| 易门县| 威海市| 富平县| 霞浦县| 瓮安县| 柘城县| 镇远县| 商洛市| 容城县| 绥中县| 建昌县| 洪泽县| 金湖县| 邹城市| 芮城县| 交口县| 安平县| 伊吾县| 平远县| 武城县| 苏尼特左旗| 西乌珠穆沁旗| 玛曲县| 临安市| 兴宁市| 银川市| 洞头县| 内乡县| 龙山县| 保康县| 奉新县| 古交市| 黔西县| 五河县| 游戏| 休宁县| 吴忠市| 鄂州市| 和田县| 辉南县| 四会市| 延川县| 隆尧县| 江陵县| 营山县| 浦北县| 增城市| 惠来县| 孟州市| 永丰县| 高碑店市| 大方县| 哈密市| 三穗县| 翁源县| 方正县| 呈贡县| 嵊州市| 黔江区| 阜新市| 忻城县| 图木舒克市| 晋江市| 永州市| 巩留县| 临泽县| 图木舒克市| 平陆县| 河津市| 湘西| 宜兴市| 萨嘎县| 青川县| 兴安盟| 安新县| 福泉市| 牡丹江市| 五华县| 花莲县| 景谷| 哈尔滨市| 涡阳县| 阳江市| 渝中区| 扎赉特旗| 南安市| 莱州市| 高安市| 新乐市| 舟曲县| 陕西省| 荆门市| 铁力市| 呼伦贝尔市| 天柱县| 积石山| 邮箱| 棋牌| 家居| 肃北| 缙云县| 鹿邑县| 双牌县| 枣庄市| 垣曲县| 修文县| 滕州市| 云林县| 吴江市| 朝阳区| 丰都县| 南通市| 广汉市| 白银市| 诸暨市| 溆浦县| 阿图什市| 明星| 石柱| 昭平县| 南岸区| 太和县| 普兰店市| 达日县| 黄大仙区| 即墨市| 南开区| 遵义县| 图们市| 旺苍县| 大石桥市| 白朗县| 满洲里市| 宜州市| 秦皇岛市| 龙泉市| 肇庆市| 宜宾县| 新绛县| 手游| 色达县| 资阳市| 安岳县| 凤冈县| 富顺县| 罗山县| 铁岭市| 沽源县| 隆子县| 泗阳县| 开江县| 阿拉善右旗| 扎囊县| 邯郸县| 抚顺县| 樟树市| 瑞安市| 牡丹江市| 汽车| 道孚县| 云安县| 滨州市| 九江县| 锡林浩特市| 武乡县| 凤冈县| 讷河市| 兴宁市| 澳门| 泸溪县| 迭部县| 军事| 松桃| 关岭| 苗栗市| 新河县| 土默特右旗| 萍乡市| 永川市| 渝北区| 墨玉县| 江油市| 肇源县| 灵台县| 舞钢市| 西乌珠穆沁旗| 大方县| 云霄县| 洛浦县| 庆元县| 类乌齐县| 静安区| 平乐县| 遵义市| 宾川县| 山丹县| 青海省| 江川县| 盐亭县| 周宁县| 专栏| 河池市| 大安市| 麦盖提县| 梁山县| 昭苏县| 威海市| 曲麻莱县| 山阴县| 桐乡市| 厦门市| 邵东县| 宁乡县| 南溪县| 子洲县| 雷山县| 湄潭县| 罗平县| 武隆县| 万载县| 观塘区| 绥阳县| 井冈山市| 华池县| 友谊县| 松滋市| 武隆县| 张掖市| 和静县| 和静县| 琼中| 泸州市| 社旗县| 龙岩市| 邢台市| 黔西县| 德保县| 开封县| 虹口区| 陆良县| 吉首市| 福鼎市| 碌曲县| 突泉县| 大悟县| 且末县| 临泉县| 凤冈县| 密云县| 阿拉善右旗| 龙门县| 获嘉县| 龙游县| 客服| 隆回县| 文成县| 乌审旗| 商洛市| 泸溪县| 珲春市| 边坝县| 南陵县| 台湾省| 临武县| 陆川县| 高陵县| 焉耆| 柏乡县| 浦县| 新泰市| 湘潭县| 拉萨市| 资阳市| 天峨县| 舞钢市| 贵溪市| 三门县| 股票| 南城县| 清原| 西华县| 香河县| 太康县| 彭山县| 喀喇| 肥乡县| 上栗县| 浦县| 辉县市| 徐闻县| 洞口县| 岳阳县| 江山市| 南通市| 博客| 沁阳市| 赤峰市| 富民县| 卢湾区| 元阳县| 太和县| 攀枝花市| 太仆寺旗| 汉寿县| http://wap.axojkz.fit http://wap.middvt.fit http://m.chsiuv.fit http://m.rchezj.fit http://rxrbxs.fit http://m.rtocoi.fit http://www.agsewp.fit http://wap.xsoqzd.fit http://qgoykw.fit http://m.ocimju.fit http://wap.dicedk.fit http://m.jmggng.fit http://scgtts.fit http://www.znrzcc.fit http://www.bm1961xotorz.fit http://dffbdy.fit http://www.hwoujy.fit http://m.ddwhyv.fit