Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Cookie #38

Closed
zhuozhuo opened this issue Jul 5, 2019 · 5 comments
Closed

Cookie #38

zhuozhuo opened this issue Jul 5, 2019 · 5 comments

Comments

@zhuozhuo
Copy link

zhuozhuo commented Jul 5, 2019

Hi,我看你Demo中关于Cookie的例子接口已经废弃,不过在JXBWebViewController中有cookie的设置属性,interceptRequestWithNavigationAction也注解说可以设置cookie,这两者设置有什么区别么?是否可以在Demo中新增Cookie的设置操作呢?

@xiubojin
Copy link
Owner

xiubojin commented Jul 6, 2019

实际所有设置cookie的方式都应该废弃,WKWebView设置cookie有延迟,通过系统提供的api没办法完美解决cookie同步的问题,可以考虑通过网络托管。

@karosLi
Copy link

karosLi commented Jul 18, 2019

实际所有设置cookie的方式都应该废弃,WKWebView设置cookie有延迟,通过系统提供的api没办法完美解决cookie同步的问题,可以考虑通过网络托管。

网络托管是什么意思?

@xiubojin
Copy link
Owner

实际所有设置cookie的方式都应该废弃,WKWebView设置cookie有延迟,通过系统提供的api没办法完美解决cookie同步的问题,可以考虑通过网络托管。

网络托管是什么意思?

涉及到WebView设置cookie的地方有两处。
第一处:
浏览器自身发起的请求,比如WebView的loadRequest方法发起的请求,这种自定义URLRequest对象的请求是可以设置cookie的,但是发送post请求时通过URLProtocol拦截到的post请求的body会丢失,所以这个问题目前无解,只能往NSHTTPCookieStorage里写cookie,但是这样cookie同步到WKWebView的cookie存储域会有延迟性,具体的延迟时间是在WKWebView加载完任意一个页面之后,你写入的cookie才会生效。
第二处:
JavaScript利用ajax发送的请求,有的时候ajax请求携带的Cookie可能会丢失(但实际NSHTTPCookieStorage存储域里是有的,你可以打印一下试试),这种解决方案就是你需要注入一段JavaScript脚本,脚本的作用是hook所有ajax请求,你到存储域里拿完cookie写到ajax请求的body里。

@karosLi
Copy link

karosLi commented Jul 23, 2019

实际所有设置cookie的方式都应该废弃,WKWebView设置cookie有延迟,通过系统提供的api没办法完美解决cookie同步的问题,可以考虑通过网络托管。

网络托管是什么意思?

涉及到WebView设置cookie的地方有两处。
第一处:
浏览器自身发起的请求,比如WebView的loadRequest方法发起的请求,这种自定义URLRequest对象的请求是可以设置cookie的,但是发送post请求时通过URLProtocol拦截到的post请求的body会丢失,所以这个问题目前无解,只能往NSHTTPCookieStorage里写cookie,但是这样cookie同步到WKWebView的cookie存储域会有延迟性,具体的延迟时间是在WKWebView加载完任意一个页面之后,你写入的cookie才会生效。
第二处:
JavaScript利用ajax发送的请求,有的时候ajax请求携带的Cookie可能会丢失(但实际NSHTTPCookieStorage存储域里是有的,你可以打印一下试试),这种解决方案就是你需要注入一段JavaScript脚本,脚本的作用是hook所有ajax请求,你到存储域里拿完cookie写到ajax请求的body里。

hook 的方式更加方便点,只是对于表单类请求,就不适合了,除非端上提供文件相关的能力

@xiubojin
Copy link
Owner

实际所有设置cookie的方式都应该废弃,WKWebView设置cookie有延迟,通过系统提供的api没办法完美解决cookie同步的问题,可以考虑通过网络托管。

网络托管是什么意思?

涉及到WebView设置cookie的地方有两处。
第一处:
浏览器自身发起的请求,比如WebView的loadRequest方法发起的请求,这种自定义URLRequest对象的请求是可以设置cookie的,但是发送post请求时通过URLProtocol拦截到的post请求的body会丢失,所以这个问题目前无解,只能往NSHTTPCookieStorage里写cookie,但是这样cookie同步到WKWebView的cookie存储域会有延迟性,具体的延迟时间是在WKWebView加载完任意一个页面之后,你写入的cookie才会生效。
第二处:
JavaScript利用ajax发送的请求,有的时候ajax请求携带的Cookie可能会丢失(但实际NSHTTPCookieStorage存储域里是有的,你可以打印一下试试),这种解决方案就是你需要注入一段JavaScript脚本,脚本的作用是hook所有ajax请求,你到存储域里拿完cookie写到ajax请求的body里。

hook 的方式更加方便点,只是对于表单类请求,就不适合了,除非端上提供文件相关的能力

对。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants