Node.js 跨子域和根域的会话管理?

Node.js 跨子域和根域的会话管理?,node.js,session,cookies,express,Node.js,Session,Cookies,Express,因此,情况如下: 我有api.localhost和localhost 用于数据库访问和会话管理的RESTAPI localhost-依赖于api.localhost的简单web应用程序 现在我的问题是: 1.如何设置Cookie,以便localhost也可以访问api.localhost设置的Cookie。(我使用passport和MongoStore进行会话管理) 当本地主机接收到cookie时,我向api.localhost发出http请求以检查其真实性。如何发送随该请求收到的cookies

因此,情况如下:

我有api.localhost和localhost

用于数据库访问和会话管理的RESTAPI

localhost-依赖于api.localhost的简单web应用程序

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

  • 当本地主机接收到cookie时,我向api.localhost发出http请求以检查其真实性。如何发送随该请求收到的cookies

  • 请相信我,我尽力用最简单的方式解释这个问题。

    你必须使用数据库。显然,您必须将会话存储在数据库中。若您的域和所有子域都读取单个数据库,那个么用户可以从不同的域访问相同的会话

    默认情况下,HTTP客户端(浏览器)不允许从跨域读取cookie。因此,您必须在cookie中显式设置域信息

    Let me explain clear,
    
    让我们假设,您有一个主域,即
    mymaindomain.com
    ,并且您可能有一些子域
    subdomain1.mymaindomain.com、subdomain2.mymaindomain.com、subdomain3.mymaindomain.com等等

    现在,一个用户登录到您的主域
    mymaindomain.com
    。应用程序设置会话cookie以识别用户。默认情况下,浏览器检查主机以发送带有请求的cookie。在您的情况下,如果用户移动到subdomain
    subdomain1.mymaindomain.com
    ,则浏览器只需尝试创建新会话

    要强制浏览器,请从
    mymaindomain.com
    发送cookie,您必须设置cookie的“域”属性。在本例中,显式域属性正好是
    mymaindomain.com
    。现在假设,用户移动到
    subdomain1.mymaindomain.com
    ,然后浏览器自动发送会话cookie,该cookie由
    mymaindomain.com
    设置

    之所以会出现这种情况,是因为浏览器在下面的子域
    子域1上匹配突出显示的部分。
    mymaindomain.com

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


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

    localhost web应用程序是连接到api.localhost服务器端还是从浏览器?