【问题标题】:Why am I losing session when working with a dashed domain name (example-dashed.com)?为什么在使用虚线域名 (example-dashed.com) 时会丢失会话?
【发布时间】:2011-05-27 20:27:19
【问题描述】:

我有一个网站 www.abrisud.com。该网站有 7 个域名(每种语言一个):abrisud.com、abrisud.it、abrisud.de 等...以及 abrisud-enclosure.co.uk。

问题出在最后一个问题上:我每次请求都会丢失会话。每次我加载一个页面时,我都有一个不同的会话 ID。在其他域上一切正常。

该网站正在运行 ruby​​ 1.8.7 和 rails 3.0.0。

我确信问题出在域名中的“-”,但我无法通过网络找到有关该主题的任何内容(或几乎任何内容)。

希望我足够清楚,如果不是直接告诉我的话。

【问题讨论】:

  • 会不会有错字,用下划线代替? abrisud_enclosure.co.uk 确实会丢弃 cookie,因为这不是有效的域名;破折号 (-) 通常应该可以正常工作。
  • 似乎我在使用某些版本的 IE 和虚线域名时遇到了问题。您是否尝试过多种浏览器?
  • @Piskvor :这不是错字,域名是 abrisud-enclosure.co.uk,我知道这个问题是用下划线知道的,但我用破折号得到它...... :-(
  • @jeremy :到目前为止,我已经在 chrome 12 和 firefox 4 上尝试过,但两者的问题都是一样的。
  • @Olivier de Robert:感谢您的澄清,这确实很奇怪。 (哦,它是一个实际的 ASCII 破折号(十六进制 0x2D)吗?(域名解析,所以可能是的;甚至可以用 em-dash 注册一个域吗?)

标签: ruby-on-rails ruby session


【解决方案1】:

这是答案:

来自模块 ActionDispatch::Http::URL (Rails 3.0.x),请务必阅读 cmets ;-)

# Returns the \domain part of a \host, such as "rubyonrails.org" in "www.rubyonrails.org". 
# You can specify a different <tt>tld_length</tt>, such as 2 to catch rubyonrails.co.uk in "www.rubyonrails.co.uk".
def domain(tld_length = 1)
  return nil unless named_host?(host)

  host.split('.').last(1 + tld_length).join('.')
end

【讨论】:

    【解决方案2】:

    好吧,使用适当的 _tld_lenght_ 参数调用 domain 方法并没有起到作用,request.domain (abrisud-enclosure.co.uk) 很好,但不是 session_domain(仍然是 co.uk)。

    所以我必须在 application_controller 中添加以下几行作为前置过滤器:

    def set_session_domain
      request.session_options[:domain] = request.domain
    end
    

    如果您有更好的解决方案,我愿意接受,因为我认为这是一个非常肮脏的解决方案。

    谢谢

    【讨论】:

      【解决方案3】:

      我在您的网站上达到了顶峰,cookie 设置为:domain=co.uk;path=/

      所以问题出在您的 Rails 堆栈中,而不是浏览器 - 是时候进行一些调试了 :-)

      【讨论】:

      • 感谢您的回答,我正在调查此事,并尽快通知您。到目前为止,我没有找到使用 domain=co.uk 设置的 cookie。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-11
      • 2017-07-23
      • 2014-08-24
      • 1970-01-01
      • 2014-08-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多