0

所以情况如下:

我有 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?

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

4

1 回答 1

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。在您的情况下,如果用户移动到 sub-domain subdomain1.mymaindomain.com,则浏览器只需尝试创建新会话。

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

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

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

注意:如果您的域完全更改,这将不起作用,我的意思是,如果您的托管域完全更改,浏览器将不会发送 session-cookie。

于 2013-11-04T20:15:42.417 回答