Ruby on rails 在两个rails4应用程序之间共享会话
我正在用Desive创建一个应用程序。有两个域名1)www.test.com和2)www.hello.com都指向同一个应用程序。所以我想在两个应用程序之间共享会话(当前用户)。用户将登录(1),并应访问域(2)Ruby on rails 在两个rails4应用程序之间共享会话,ruby-on-rails,ruby,ruby-on-rails-4,devise,Ruby On Rails,Ruby,Ruby On Rails 4,Devise,我正在用Desive创建一个应用程序。有两个域名1)www.test.com和2)www.hello.com都指向同一个应用程序。所以我想在两个应用程序之间共享会话(当前用户)。用户将登录(1),并应访问域(2) 请建议最好的方法。Rails维护cookie,在每次HTTP请求期间将其传递到服务器。请检查网络日志下的请求标题 你会看到像这样的东西 Cookie: some-junk-looking-session-data 所以在两个完全不同的rails应用程序之间共享会话是一个安全问题,ra
请建议最好的方法。Rails维护cookie,在每次HTTP请求期间将其传递到服务器。请检查网络日志下的请求标题 你会看到像这样的东西
Cookie: some-junk-looking-session-data
所以在两个完全不同的rails应用程序之间共享会话是一个安全问题,rails不允许这种行为
但也有例外。只要TLD发生更改,就可以共享会话。例如:hello.com
&hello.org
YourApp::Application.config.session_store :cookie_store,
key: '_app_session',
domain: :all
参考资料:
Rails维护cookie,在每次HTTP请求期间将cookie传递到服务器。请检查网络日志下的请求标题 你会看到像这样的东西
Cookie: some-junk-looking-session-data
所以在两个完全不同的rails应用程序之间共享会话是一个安全问题,rails不允许这种行为
但也有例外。只要TLD发生更改,就可以共享会话。例如:hello.com
&hello.org
YourApp::Application.config.session_store :cookie_store,
key: '_app_session',
domain: :all
参考资料:
这里的基本问题是cookies的工作方式(当然,会话依赖于此)。cookie有一个域属性,浏览器只发送域与请求主机匹配的cookie(域的开头有一点微妙的含义) 此外,在设置cookie时,浏览器将只接受当前域的父域且不是公共域的域)。例如,如果您收到来自
www.example.com
的响应,它可以为www.example.com
或example.com
设置cookie,但不能设置.com
(浏览器具有不允许使用域名的cookie)
所有这些都表明,如果你的两个应用程序不共享一个共同的父应用程序(就像你的情况一样),那么你就不能共享cookie,因此你就不能共享rails会话
有很多方法可以解决这个问题,一个简单的方法就是(中央认证服务)协议。这方面的基本流程是
sso.example.com/service=http://hello.com/home
hello.com
设置会话cookie,以便后续请求可以跳过步骤2-6cas的ruby实现(例如,既有cas客户端又有服务器)和使用cas的Desive。当然,也有其他方法可以做到这一点,例如使用誓言,但cas稍微简单一些。这里的基本问题是Cookie的工作方式(当然会话依赖于此).cookie有一个域属性,浏览器只发送域与请求主机匹配的cookie(域的开头有一点微妙的含义) 此外,在设置cookie时,浏览器将只接受当前域的父域且不是公共域的域)。例如,如果您收到来自
www.example.com
的响应,它可以为www.example.com
或example.com
设置cookie,但不能设置.com
(浏览器具有不允许使用域名的cookie)
所有这些都表明,如果你的两个应用程序不共享一个共同的父应用程序(就像你的情况一样),那么你就不能共享cookie,因此你就不能共享rails会话
有很多方法可以解决这个问题,一个简单的方法就是(中央认证服务)协议。这方面的基本流程是
sso.example.com/service=http://hello.com/home
hello.com
设置会话cookie,以便后续请求可以跳过步骤2-6存在cas的ruby实现(例如,同时具有cas客户端和服务器)设计使用CAS。当然还有其他方法可以做到这一点,例如使用誓言,但CAS稍微简单一些。我有一个应用程序,这个应用程序有两个域。因此,当用户登录一个域时,当两个应用程序在同一浏览器中打开时,它也应该使用第二个域登录。我没有给出-1个人我说过,如果你的域名是example.com和example.orgI,并且这个应用程序有两个域名,那么它只会起作用。因此,当用户登录一个域名时,当两个应用程序在同一浏览器中打开时,它也应该登录第二个域名。我没有给出-1。我说过,其他人给了它,它只会起作用如果您的域是example.com和example.org