Node.js 跨子域和根域的会话管理?
因此,情况如下: 我有api.localhost和localhost 用于数据库访问和会话管理的RESTAPI localhost-依赖于api.localhost的简单web应用程序 现在我的问题是: 1.如何设置Cookie,以便localhost也可以访问api.localhost设置的Cookie。(我使用passport和MongoStore进行会话管理)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
请相信我,我尽力用最简单的方式解释这个问题。你必须使用数据库。显然,您必须将会话存储在数据库中。若您的域和所有子域都读取单个数据库,那个么用户可以从不同的域访问相同的会话 默认情况下,HTTP客户端(浏览器)不允许从跨域读取cookie。因此,您必须在cookie中显式设置域信息
Let me explain clear,
让我们假设,您有一个主域,即mymaindomain.com
,并且您可能有一些子域subdomain1.mymaindomain.com、subdomain2.mymaindomain.com、subdomain3.mymaindomain.com等等
现在,一个用户登录到您的主域mymaindomain.com
。应用程序设置会话cookie以识别用户。默认情况下,浏览器检查主机以发送带有请求的cookie。在您的情况下,如果用户移动到subdomainsubdomain1.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服务器端还是从浏览器?