在不中断用户会话的情况下将Rails非www重定向到www?

时间:2012-04-18 23:40:57

标签: ruby-on-rails cookies

好的,所以我想将所有非www域请求重定向到www.mydomain.com只是为了谷歌/搜索引擎的一致性(我知道所有关于规范标签/谷歌网站管理员工具,让我们忽略它)

我知道通过Nginx(或Apache的htaccess)执行此操作的标准方法。

然而,问题是这可能会扰乱用户会话吗?例如,如果有人通过domain.com登录,他们的cookie只对domain.com有效,而不是www.domain.com,因此通过重定向我会让所有用户都必须重新登录。

有没有办法让重定向不会破坏用户会话?

也许我可以做一些检查饼干的事情?如果它不存在,则执行重定向。如果是,则不要重定向。

def index #controller method for requests from domain.com or www.domain.com
   @user = @requestManager.authorizedUser(cookies, params, logger) //check for cookies

   #if no cookies (Google bot or new visitor) 
   #and request is from domain.com, redirect to www.domain.com

   if(@user == nil and request.host =~ /^domain.com/)
            logger.info("Redirecting")
            redirect_to "http://www.domain.com", :status => 301
            return
    end
end

这可以将非www重定向到www.domain.com,而不会中断当前的用户会话吗?

1 个答案:

答案 0 :(得分:0)

如果未明确设置cookie的域,则将其限制为设置它的站点的主机名。

如果您的用户拥有您真正重视的长期会话,那么这可能会实现您的目标:

  1. 修改您的网站以使用所有Cookie设置域名。
  2. 使用firebug检查用户访问网站时是否使用新域重新发布Cookie
  3. 等待一段时间,直到至少大多数用户访问了这个
  4. 启用重定向
  5. 会话将丢失的用户是在等待期间未访问该网站的用户。