假设我正在运行一个多租户应用程序,该应用程序通过子域为每个组织提供自己的门户。浏览器会话是否对每个子域唯一?
示例 -
orgA.application.com
orgB.application.com
- 等...
每个子从我PSQL分贝不同的模式/租户读取,但在其他方面相同的应用程序。
在我ApplicationController
我设置current_user
为 -
def current_user
if session[:user_id]
@current_user ||= User.find_by_id(session[:user_id])
end
end
很少有管理员/超级用户如自己,对每个子域的用户帐户。如果我与我的用户(id = 22
)登录到orgA
,那么我的session
被设置为user_id: 22
。
现在说我想切换到orgB
,其中我的用户名是44
。如果我在orgA
中设置会话后登录到orgB
,是否有机会偶然以orgB
上的22
作为用户登录?
更重要的是,我试图了解浏览器Cookie会话是如何设置的。根据我的理解,它是在客户端浏览器中加密并缓存的变量的哈希。这是每个子域的设置吗?或者,特定站点的所有子域共享相同的缓存/会话Cookie?
更重要的是,如何防止以上例子中的会话交叉授粉?我的current_user
方法是否太基础?
谢谢!
听起来像我在明确留下它与默认值。完美清晰的解释 - 谢谢! – user2490003