2013-11-04 32 views
0

所以这里是情况:跨子域和根域的会话管理?

我有api.localhost和localhost。

api.localhost - 用于DB访问和会话管理的REST API。

localhost - 依赖api.localhost的简单Web应用程序。

现在我的问题是: 1.如何设置cookie,以便本地主机也可以访问api.localhost设置的cookie。 (我用的护照和MongoStore会话管理)

  1. 当本地主机接收到饼干,我做一个HTTP请求到api.localhost以检查其真实性。我如何发送与该请求一起收到的Cookie?

PS。 - 相信我,我非常努力地以最简单的方式解释问题。

+0

本地主机Web应用程序是否连接到api.localhost服务器端或从浏览器? – hgoebl

回答

1

您必须使用数据库。明确地说,你必须将会话存储在数据库中。如果您的域和所有子域读取单个数据库,则用户可以从不同域访问相同的会话。

默认情况下,HTTP客户端(浏览器)不允许从跨域读取cookie。所以你必须在你的cookie中明确地设置域名信息。

Let me explain clear, 

让我们假设,你有一个主要领域,即mymaindomain.com和你有一些子域名可能subdomain1.mymaindomain.com, subdomain2.mymaindomain.com, subdomain3.mymaindomain.com, and more

现在,用户登录你的主要领域mymaindomain.com。而你的应用程序设置会话cookie来识别用户。默认情况下,浏览器检查主机向请求发送cookie。在你的情况下,如果用户移动到子域subdomain1.mymaindomain.com,那么浏览器只是尝试创建新的会话。

要强制浏览器发送来自mymaindomain.com的cookie,必须设置cookie的“Domain”属性。在这种情况下,显式域属性正好是mymaindomain.com。现在假设用户移动到subdomain1.mymaindomain.com,然后浏览器自动发送由mymaindomain.com设置的会话cookie。

这是发生的,因为这里浏览器匹配突出显示部分在以下子域subdomain1.mymaindomain.com

为了让您的应用程序获得相同的会话cookie或用户会话,并且其余的工作应该照顾后端应用程序。同样的域名限制也发生在您的后端。如果你想支持子域名浏览器请求,您的子域名的应用程序应该读取数据库这是常见的mymaindomain.com和其他子域像subdomain2.mymaindomain.com, subdomain3.mymaindomain.com, and more

注会话信息:这不会工作,如果您的域名是完全改变,我的意思是浏览器不会发送会话cookie,如果你的主机域被完全改变。