safari 浏览器 CORS 协议 cookie 设置不成功
safari 浏览器 CORS 协议 cookie 设置不成功
CORS跨域资源共享,可以代替jsonp来实现跨域的 ajax 请求, 根据协议的定义可以设置cookie来实现用户验证
问题
根据协议来设置response头信息,跨域的请求限制可以解决,在Chrome或android浏览器中也可以正常使用 cookie . 但是在 mac safari 或 iPhone的webview, safari 浏览中设置 cookie 不生效。目前仅找到通过浏览器设置来解决,并不能从代码上解决此问题。
以下是 express node 服务端代码
res.setHeader('Access-Control-Allow-Origin', req.headers.origin); //设置来源域可访问
res.setHeader('Access-Control-Allow-Credentials', true);// 可用加密信息验证用户 cookie
res.setHeader('Access-Control-Allow-Methods', 'POST, GET, PUT, DELETE, OPTIONS'); //支持的方法
//... other code
res.cookie("uid","111111") //设置 cookie
客户端js 代码
var xhr = new XMLHttpRequest();
xhr.open("GET","http://abc.com:4000/adfda", true) //GET 其他域 异步
xhr.withCredentials = true;//允许使用 cookie
xhr.send();
safari 设置
通过safari偏好设置->隐私-> cookie和网站数据->始终允许, iPhone可在设置中找到->safari->cookie和网站数据->始终允许 。此方法无法直接解决用户端的问题。
更新
mac safari 版本 11.0.2 (12604.4.7.1.4) 已经不存在这个问题,其他环境还不知
感谢分享,这个问题确实头疼,其它浏览器都正常,就safari,记得之前safari似乎可以支持的, 不知道从什么时候起不行了,需要通过以上设置解决
哎,这个坑太深
针对移动端app里的容器(比如webview),加两行代码,设置成接受cookie即可。 代码复制
NSHTTPCookieStorage *cook = [NSHTTPCookieStorage sharedHTTPCookieStorage];
[cook setCookieAcceptPolicy:NSHTTPCookieAcceptPolicyAlways];
感谢分享
谢谢分享,这个坑真的很深
感谢分享
感谢分享,被坑了
被坑过 +1
感谢分享