美文网首页
WKWebView的session存储

WKWebView的session存储

作者: 婼熙之名 | 来源:发表于2017-12-25 16:41 被阅读0次

WKWebView不自动存储session的问题(参考别人)

1)预加载一次HTML只加载不显示(获得Cookies,存储传递)

//加载本地html

[self.webView loadHTMLString:@"" baseURL:[NSURL URLWithString:self.url]];

2)实现一下两个代理方法(上面出现过),直接复制就行

// 页面加载完成之后调用   ----- self.isFirstLoad:是否首次调用,首次调用才存储

//下面是上图的代码,直接复制即可

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

if (!self.isFirstLoad) {

//取出cookie

NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage];

//js函数

NSString *JSFuncString =

@"function setCookie(name,value,expires)\

{\

var oDate=new Date();\

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

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

}\

function getCookie(name)\

{\

var arr = document.cookie.match(new RegExp('(^| )'+name+'=({FNXX==XXFN}*)(;|$)'));\

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) {

if (![cookie.name isEqualToString:@"__cust"]) {

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

[JSCookieString appendString:excuteJSString];

}

}

//执行js

[webView evaluateJavaScript:JSCookieString completionHandler:^(id obj, NSError * _Nullable error) {

[self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:self.url]]];

}];

self.isFirstLoad = YES;

}

}

//--------------- 在收到响应后,决定是否跳转

//以下是上图的代码

- (void)webView:(WKWebView *)webView decidePolicyForNavigationResponse:(WKNavigationResponse *)navigationResponse decisionHandler:(void (^)(WKNavigationResponsePolicy))decisionHandler{

//存储session

NSHTTPURLResponse *response = (NSHTTPURLResponse *)navigationResponse.response;

NSArray *cookies =[NSHTTPCookie cookiesWithResponseHeaderFields:[response allHeaderFields] forURL:response.URL];

for (NSHTTPCookie *cookie in cookies) {

[[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookie];

}

//允许跳转

decisionHandler(WKNavigationResponsePolicyAllow);

}

相关文章

  • WKWebView的session存储

    WKWebView不自动存储session的问题(参考别人) 1)预加载一次HTML只加载不显示(获得Cookie...

  • WKWebView Cookie

    1、WKWebView Cookie存储 业界普遍认为 WKWebView 拥有自己的私有存储,不会将 Cooki...

  • Session一致性

    (1)session sticky (2)session replication (3)session数据集中存储

  • PHP中的session操作

    一、session的基本操作 session详解 二、session过期时间 三、session存储到Redis ...

  • cookie、session、sessionStorage、lo

    cookie、session区别 cookie 存储于浏览器端,而 session 存储于服务端 cookie 的...

  • django设置,将session存储到redis中

    diango的session默认存储在内置django_session表中,可以设置存储在redis中?。 0,在...

  • 从 session 到 token

    2018.04.18 服务器存储 session 的缺点:所有集群实例都存储所有用户的 session,集群实例数...

  • redis&Django:存储session

    Django中session默认存储方式 session的redis存储配置 1. 安装包 2. 修改settin...

  • session和token的关系和区别?

    普遍的回答: cookie和session的区别:cookie存储在客户端,session存储在服务器 token...

  • Session存储

    PHP为sesion的存储提供了三种方式: 文件/ 内存/ 自定义存储,默认是使用文件存储.在访问量大的网站上采用...

网友评论

      本文标题:WKWebView的session存储

      本文链接:https://www.haomeiwen.com/subject/rwglgxtx.html