blog icon indicating copy to clipboard operation
blog copied to clipboard

safari 浏览器 CORS 协议 cookie 设置不成功

Open jun-lu opened this issue 9 years ago • 8 comments

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) 已经不存在这个问题,其他环境还不知

jun-lu avatar Mar 15 '16 07:03 jun-lu

感谢分享,这个问题确实头疼,其它浏览器都正常,就safari,记得之前safari似乎可以支持的, 不知道从什么时候起不行了,需要通过以上设置解决

ryanlin1986 avatar Sep 30 '16 17:09 ryanlin1986

哎,这个坑太深

针对移动端app里的容器(比如webview),加两行代码,设置成接受cookie即可。 代码复制

NSHTTPCookieStorage *cook = [NSHTTPCookieStorage sharedHTTPCookieStorage];  
[cook setCookieAcceptPolicy:NSHTTPCookieAcceptPolicyAlways];  

WALL-E avatar Apr 19 '17 07:04 WALL-E

感谢分享

hanangjie avatar May 19 '17 09:05 hanangjie

谢谢分享,这个坑真的很深

bullyork avatar Aug 23 '17 06:08 bullyork

感谢分享

DaDiaoShuai avatar Sep 05 '17 16:09 DaDiaoShuai

感谢分享,被坑了

sadpig1993 avatar Apr 12 '18 09:04 sadpig1993

被坑过 +1

likaihua avatar May 11 '18 07:05 likaihua

感谢分享

iHaPBoy avatar May 11 '18 13:05 iHaPBoy