如何实现跨域设置cookie?

A站点是提供接口,B站点调用A站点的接口。

现在问题来了,B站点发起请求到A时,A在controller层调用:controller.setCookie(); 是无法设置cookie到B站点的。设置的cookie是A站点的cookie。


我在使用CaptchaRender这个工具时,遇到了这个坑,有没有好的解决办法?

补充一下,B站点无法部署服务端程序,A与B的顶级域名不同。

评论区

lyh061619

2017-01-19 13:25

这有个插件http://www.oschina.net/news/69360/kisso-3-5,也有集成例子,即拿即用。

lyh061619

2017-01-19 13:36

源码可以参考下,这个插件是可以跨域的,估计能满足你的需求。

happyboy

2017-01-19 13:47

B站点完全可以根据A站点的返回结果,自己进行cookie的处理,为什么非要全权委托A站去完成呢?

nbjgl

2017-01-19 13:56

@lyh061619 真的很强大~~

nbjgl

2017-01-19 13:58

@happyboy 比如登录验证码,需要服务端生成验证码,存入cookie,B站点提交用户登录数据,包括用户输入的验证码到A站点进行登录验证,A站点从cookie中取出验证码校验。这时候,B怎么自己处理cookie?

Dreamlu

2017-01-19 14:27

可以尝试用个iframe去做通信

toni

2017-01-19 15:11

使用 jsonp ,将 cookies 回调回来

happyboy

2017-01-19 15:31

@nbjgl B向A发起请求总会有返回的啊,B收到来自A的返回后对自己的cookie进行处理不就ok了?

nbjgl

2017-01-19 16:35

@happyboy B向A请求了图片验证码。待B向A提交数据时候,A要从cookie中取出这个验证码,与B提交过来的验证码校验。然后然后……才是你说的数据返回的问题。

nbjgl

2017-01-19 16:36

现在校验时候就需要用到cookie了呀。这时候B还没有存cookie呢

nbjgl

2017-01-19 16:37

@lyh061619 这个好像只能设置一个域名进行跨域。A作为API站点,要给N多个站点提供服务时候肿么办?

toni

2017-01-19 16:46

@nbjgl a站做个jsonp的api,b站获取a站验证码后浏览器有a站的cookies,之后b站用ajax发送个jsonp请求到a站,A站取出请求的cookies ,将cookies返回到b站的ajax请求,此时 b站通过js就可以取到a站验证码的cookies了

toni

2017-01-19 16:47

@toni 其他n个站点都可以通过这种方式获取cookies

nbjgl

2017-01-19 16:50

@toni 1.B站获取A站验证码以后,浏览器不会有A的cookie,也不会有B的,具体原因可能是因为这个请求不是来源于A站,所以A在服务端设置了cookie,在B的浏览器中是无效的,反正我现在是在B的浏览器中看不到任何cookie。

toni

2017-01-19 16:55

@nbjgl 验证码是a的域名吧,浏览器应该有a站的cookies 把,要不cookies在哪 ,只是因为域不同,浏览器上看不到而已 .

toni

2017-01-19 16:58

@nbjgl 浏览器加个 a站的标签页,去a站标签页看就能看到

nbjgl

2017-01-19 16:58

@toni 有的话不会看不到的呀,而且A取出之前自己存的cookie的时候,显示为null 。

nbjgl

2017-01-19 17:02

@JFinal 有没有好的解决方案?

nbjgl

2017-01-19 17:05

@toni A站是服务端 没有可视化页面,单纯作为服务端使用,提供API接口。所以无法加标签页。

happyboy

2017-01-19 17:25

@nbjgl 对啊,不管在A那边怎么处理最终还是要返回给B的,返回之后B想怎么玩就怎么玩啊,你是认为处理不了还是认为这时候再处理时间上已经晚了?

toni

2017-01-19 17:25

@nbjgl 直接把验证码图片也页签打开就好,不用页面,然后看看cookies 都有啥

happyboy

2017-01-19 17:37

@nbjgl 我的意思是登录验证的请求通过B站的某个控制层方法发起,而不是直接提交给A,这样你在B中的控制层中发起一个http请求,返回结果你自然也能捕获,这时候你可以根据返回的结果进行相应的cookie处理,这完全不是什么难事。不知道我对你的需求理解的对不对?

热门反馈

扫码入社