我有两个WebApp1和WebApp2在两个不同的域。
我在WebApp1的HttpResponse中设置了一个cookie。 如何从WebApp2中的HttpRequest读取相同的cookie ?
我知道这听起来很奇怪,因为cookie是特定于给定域的,我们不能从不同的域访问它们;不过我听说过跨域cookie,它可以在多个web应用程序之间共享。如何使用跨域cookie实现这一需求?
注意:我正在尝试使用J2EE web应用程序
我有两个WebApp1和WebApp2在两个不同的域。
我在WebApp1的HttpResponse中设置了一个cookie。 如何从WebApp2中的HttpRequest读取相同的cookie ?
我知道这听起来很奇怪,因为cookie是特定于给定域的,我们不能从不同的域访问它们;不过我听说过跨域cookie,它可以在多个web应用程序之间共享。如何使用跨域cookie实现这一需求?
注意:我正在尝试使用J2EE web应用程序
当前回答
就像其他人说的,你不能分享cookie,但你可以这样做:
将所有cookie集中到一个域中,例如cookemaker .example 当用户向example.com发出请求时,您将他重定向到cookiemaker.example cookiemaker。Example将他重定向到example.com,并提供你需要的信息
当然,它不是完全安全的,你必须在你的应用程序之间创建某种内部协议来做到这一点。
最后,如果在每个请求中都这样做,对用户来说会非常讨厌,但如果只是第一个请求就不会。
但我认为没有别的办法了。
其他回答
在nfriedly.com上有一个关于Facebook如何做到这一点的不错的概述
还有浏览器指纹识别,它与cookie不同,但作用类似,因为它可以帮助您以相当程度的确定性识别用户。Stack Overflow上有一篇文章提到了一种指纹识别方法
据我所知,cookie受到“同源”策略的限制。但是,使用CORS,您可以接收和使用“服务器B”cookie,在“服务器B”上从“服务器a”建立持久会话。
尽管,这需要在“服务器B”上设置一些头文件:
Access-Control-Allow-Origin: http://server-a.example.com
Access-Control-Allow-Credentials: true
你将需要在所有的“服务器A”请求(例如:xhr)上发送“withCredentials”标志。withCredentials = true;)
你可以在这里阅读:
http://www.html5rocks.com/en/tutorials/cors/
https://developer.mozilla.org/en-US/docs/HTTP/Access_control_CORS
因为很难做第三方cookie,也有些浏览器不允许这样做。
你可以尝试将它们存储在HTML5本地存储中,然后将它们与前端应用程序的每个请求一起发送。
我已经创建了一个NPM模块,它允许你跨域共享本地存储的数据: https://www.npmjs.com/package/cookie-toss
通过使用托管在域A上的iframe,您可以将所有用户数据存储在域A上,并通过向域A iframe发送请求来引用该数据。
因此,域B、域C等可以注入iframe并向其发送请求,以存储和访问所需的数据。域A成为所有共享数据的中心。
使用域a中的域白名单,您可以确保只有您依赖的站点可以访问域a上的数据。
诀窍是在域A上的iframe中有能够识别正在请求的数据的代码。上面NPM模块中的README更深入地介绍了这个过程。
希望这能有所帮助!
就像其他人说的,你不能分享cookie,但你可以这样做:
将所有cookie集中到一个域中,例如cookemaker .example 当用户向example.com发出请求时,您将他重定向到cookiemaker.example cookiemaker。Example将他重定向到example.com,并提供你需要的信息
当然,它不是完全安全的,你必须在你的应用程序之间创建某种内部协议来做到这一点。
最后,如果在每个请求中都这样做,对用户来说会非常讨厌,但如果只是第一个请求就不会。
但我认为没有别的办法了。