跨子域和根域的会话管理?

时间:2013-11-04 07:12:37

标签: node.js session cookies express

情况就是这样:

我有api.localhost和localhost。

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

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

现在我的问题是: 1.如何设置cookie,使得api.localhost设置的cookie也可以被localhost访问。 (我使用护照和MongoStore进行会话管理)

  1. 当在localhost收到cookie时,我向api.localhost发出http请求以检查其真实性。如何发送我收到的带有该请求的cookie?
  2. PS。 - 相信我,我非常努力地用最简单的方式解释这个问题。

1 个答案:

答案 0 :(得分: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的“域”属性。在这种情况下,显式域属性正好是mymaindomain.com。现在假设,用户移动到subdomain1.mymaindomain.com然后浏览器自动发送由mymaindomain.com设置的会话cookie。

这种情况会发生,因为此处的浏览器匹配会在以下子域subdomain1. mymaindomain.com 上突出显示部分。

这样您的应用程序就可以获得相同的会话cookie或用户会话,其余的工作应该是后端应用程序。同样的域限制也发生在你的后端。如果您想支持子域的浏览器请求,您的子域应用程序应该读取数据库中的会话信息,该信息对于mymaindomain.comsubdomain2.mymaindomain.com, subdomain3.mymaindomain.com, and more

等其他子域是常见的

注意:如果您的域名完全更改,这将无效,我的意思是如果您的托管域名完全更改,浏览器将不会发送会话Cookie。