【发布时间】:2010-10-03 19:59:04
【问题描述】:
我有一个 Rails 2.2.2 应用程序,我想与多个客户“共享”。每个客户都有自己的域名和数据库。目的是允许一个 Rails 应用程序“托管”许多网站。
我使用 Apache 作为混合集群的前端,作为 Web 服务器。为了让 Rails 知道哪个请求是针对哪个客户端的,Apache 为每个请求添加了一个“client_id”标头。 Rails 使用这个 'client_id' 来选择正确的数据库。
只要我一次只从一个域名访问它,它就可以很好地工作。说“example1.com”。
当许多用户同时从多个域名访问应用程序时,它甚至可以正常工作。
我遇到的一个问题是,当两个用户同时从两个域名访问应用程序时,cookie 会以意想不到的方式重置。
下面的日志sn-p说明了问题:
第一个请求来自登录到 example1.com 的用户 1。
第二个请求来自用户 2,针对 example2.com 主页。
第三个请求来自用户 1,请求应用程序中的另一个页面。据推测,该请求包括原始 cookie。 问题是,为什么 Rails 会发回不同的 cookie ???
请注意,与其他几个问题不同,我并不想在多个域之间共享同一个 cookie。 上面示例中的用户 1 和用户 2 正在访问不同的域。
-- 约翰
**1st Request from USER 1 for example1.com**
Processing Admin::CmsController#index (for 75.127.142.66 at 2009-01-27 13:15:27) [GET]
Session ID: 00b9cfb6fd397e5c9934ea58eaef648d
>>> Request for client 90873721, EXAMPLE1.COM
Rendering template within layouts/admin/standard
Rendering admin/cms/list
Completed in 114ms (View: 14, DB: 81) | 200 OK [https://example1.com/admin/cms]
**2nd Request from User 2 for example2.com**
Processing CmsController#cms_show (for 64.1.215.163 at 2009-01-27 13:16:15) [GET]
Session ID: 4fed1c59001f7484a63fb6280376825a
Parameters: {"alias"=>"home.html"}
>>> Request for client 48218343, EXAMPLE2.COM
### alias: home.html
Rendering template within layouts/two-column
Rendering cms/cms_show
Completed in 23ms (View: 13, DB: 3) | 200 OK [http://example2.com/]
**3rd Request from User 1 for example1.com -- note session ID changes!!!**
Processing Admin::CmsController#index (for 75.127.142.66 at 2009-01-27 13:16:18) [GET]
Session ID: 85c178aa70ed2bef6a767e844bf6c6d6
>>> Request for client 90873721, EXAMPLE1.COM
####### 'admin/cms', 'index'
Redirected to actionsignincontroller/admin/user
Filter chain halted as [:check_authentication] rendered_or_redirected.
Completed in 4ms | 302 Found [https://example1.com/admin/cms]
**4th request -- redirected from 3rd request**
Processing Admin::UserController#signin (for 75.127.142.66 at 2009-01-27 13:16:18) [GET]
Session ID: 85c178aa70ed2bef6a767e844bf6c6d6
>>> Request for client 90873721, EXAMPLE1.COM
Rendering template within layouts/admin/standard
Rendering admin/user/signin
Completed in 10ms (View: 6, DB: 0) | 200 OK [https://example1.com/admin/user/signin]
【问题讨论】:
标签: ruby-on-rails ruby session