Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在两个rails4应用程序之间共享会话_Ruby On Rails_Ruby_Ruby On Rails 4_Devise - Fatal编程技术网

Ruby on rails 在两个rails4应用程序之间共享会话

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

我正在用Desive创建一个应用程序。有两个域名1)www.test.com和2)www.hello.com都指向同一个应用程序。所以我想在两个应用程序之间共享会话(当前用户)。用户将登录(1),并应访问域(2)


请建议最好的方法。

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会话

有很多方法可以解决这个问题,一个简单的方法就是(中央认证服务)协议。这方面的基本流程是

  • 用户访问hello.com并尝试访问一些受保护的资源(例如/主页
  • 用户被重定向到
    sso.example.com/service=http://hello.com/home
  • 用户的身份在这里像往常一样得到验证:用户要么登录,要么从cookie中被识别,等等
  • sso服务生成一个票证(一个任意令牌)并将用户重定向到`
  • hello.com上的应用程序向SSO服务器发出(服务器端)请求,并传递票证
  • SSO服务器响应,指示票证是否有效。如果票证有效,它还将包括有关用户的一些信息(例如电子邮件)
  • hello.com
    设置会话cookie,以便后续请求可以跳过步骤2-6

  • cas的ruby实现(例如,既有cas客户端又有服务器)和使用cas的Desive。当然,也有其他方法可以做到这一点,例如使用誓言,但cas稍微简单一些。

    这里的基本问题是Cookie的工作方式(当然会话依赖于此).cookie有一个域属性,浏览器只发送域与请求主机匹配的cookie(域的开头有一点微妙的含义)

    此外,在设置cookie时,浏览器将只接受当前域的父域且不是公共域的域)。例如,如果您收到来自
    www.example.com
    的响应,它可以为
    www.example.com
    example.com
    设置cookie,但不能设置
    .com
    (浏览器具有不允许使用域名的cookie)

    所有这些都表明,如果你的两个应用程序不共享一个共同的父应用程序(就像你的情况一样),那么你就不能共享cookie,因此你就不能共享rails会话

    有很多方法可以解决这个问题,一个简单的方法就是(中央认证服务)协议。这方面的基本流程是

  • 用户访问hello.com并尝试访问一些受保护的资源(例如/主页
  • 用户被重定向到
    sso.example.com/service=http://hello.com/home
  • 用户的身份在这里像往常一样得到验证:用户要么登录,要么从cookie中被识别,等等
  • sso服务生成一个票证(一个任意令牌)并将用户重定向到`
  • hello.com上的应用程序向SSO服务器发出(服务器端)请求,并传递票证
  • SSO服务器响应,指示票证是否有效。如果票证有效,它还将包括有关用户的一些信息(例如电子邮件)
  • hello.com
    设置会话cookie,以便后续请求可以跳过步骤2-6

  • 存在cas的ruby实现(例如,同时具有cas客户端和服务器)设计使用CAS。当然还有其他方法可以做到这一点,例如使用誓言,但CAS稍微简单一些。

    我有一个应用程序,这个应用程序有两个域。因此,当用户登录一个域时,当两个应用程序在同一浏览器中打开时,它也应该使用第二个域登录。我没有给出-1个人我说过,如果你的域名是example.com和example.orgI,并且这个应用程序有两个域名,那么它只会起作用。因此,当用户登录一个域名时,当两个应用程序在同一浏览器中打开时,它也应该登录第二个域名。我没有给出-1。我说过,其他人给了它,它只会起作用如果您的域是example.com和example.org