情况就是这样:
我有api.localhost和localhost。
api.localhost - 用于数据库访问和会话管理的REST API。
localhost - 依赖api.localhost的简单Web应用程序。
现在我的问题是: 1.如何设置cookie,使得api.localhost设置的cookie也可以被localhost访问。 (我使用护照和MongoStore进行会话管理)
PS。 - 相信我,我非常努力地用最简单的方式解释这个问题。
答案 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.com
和subdomain2.mymaindomain.com, subdomain3.mymaindomain.com, and more
注意:如果您的域名完全更改,这将无效,我的意思是如果您的托管域名完全更改,浏览器将不会发送会话Cookie。