2011-05-18 77 views
3

我有一個網站www.abrisud.com。這個網站有7個域名(每種語言一個):abrisud.com,abrisud.it,abrisud.de等...和abrisud-enclosure.co.uk。爲什麼我在使用虛線域名(example-dashed.com)時會丟失會話?

問題在於最後一個問題:我每次請求都會丟失會話。每次我加載一個頁面時,我都有一個不同的會話ID。在其他領域,一切工作都很好。

該網站運行ruby 1.8.7和rails 3.0.0。

我確信問題來自域名中的「 - 」,但我無法通過網絡找到有關該主題的任何內容(或幾乎任何東西)。

希望我已經足夠清楚,如果不只是告訴我。

+0

難道會有一個錯字,用下劃線代替嗎? 'abrisud_enclosure.co.uk'確實會丟棄cookie,因爲這不是一個有效的域名;破折號('-')通常應​​該可以正常工作。 – Piskvor 2011-05-18 15:55:24

+0

我似乎遇到了某些版本的IE和虛線域名的問題。你有沒有嘗試過多種瀏覽器? – 2011-05-19 02:31:39

+0

@Piskvor:這不是一個錯字,域名是abrisud-enclosure.co.uk,我知道這個問題與下劃線已知,但我用破折號得到了...... :-( – 2011-05-19 07:38:46

回答

1

下面是答案:

從模塊ActionDispatch :: HTTP :: URL(Rails的3.0.x中),請務必閱讀評論;-)

# 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 
0

我在您的網站採取了一個高峯,該cookie設置有:域名= co.uk;路徑=/

所以問題是在您的軌道棧,而不是瀏覽器(S) - 時間做一些調試:-)

+0

謝謝你的回答,我現在正在研究這個問題,讓你儘快知道。到目前爲止,我沒有找到cookie設置爲domain = co.uk。 – 2011-05-23 08:16:34

1

好吧,打電話給域名方法與相應的_tld_lenght_參數沒有起作用,request.domain(abrisud-enclosure.co.uk)很好,但不是session_domain(仍然co.uk)。

所以我不得不過濾器之前,添加以下行作爲我application_controller:

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

如果你有一個更好的解決辦法我打開它,因爲我覺得這是一個非常骯髒的修復。

謝謝

相關問題