2009-01-28 146 views
16

我正在使用jQuery插件來設置cookie,並且當我使用localhost作爲域時,它不會存儲cookie。設置HTTP cookie時,我可以使用localhost作爲域嗎?

這裏是我使用jQuery 1.2.6的插件。

http://www.stilbuero.de/2006/09/17/cookie-plugin-for-jquery/

下面是我使用的代碼。你可以看到它不像localhost,我從localhost上的開發Web服務器運行它。一個細節是我運行的端口4005,但不應該影響域,AFAIK。

$(function() { 

    console.log('Testing'); 

    var one = $.cookie('Test.One'); 
    var two = $.cookie('Test.Two'); 
    var three = $.cookie('Test.Three'); 

    console.log(['one', one]); 
    console.log(['two', two]); 
    console.log(['three', three]); 

    $('#div1').text(one); 
    $('#div2').text(two); 
    $('#div3').text(three); 

    $.cookie('Test.One', 'Test 1'); 
    $.cookie('Test.Two', 'Test 2', { path: '/' }); 
    $.cookie('Test.Three', 'Test 3', { path: '/', domain: 'localhost' }); 

}); 

回答

28

我在設置cookie時遇到過類似的問題。組成一個域名並將其作爲127.0.0.1添加到您的主機文件中。然後在該域上運行Web應用程序。

+0

是的,我應該閱讀這篇文章,而不是丟失2個小時;-)「localhost」肯定是一個不好的價值! – 2012-08-13 13:03:36

+1

只需使用「lvh.me」即可。此域名已指向127.0.0.1 – 2016-12-12 02:15:50

5

我嘗試設置主機文件使用替代名稱(local.acme.com),我現在可以在該域上設置Cookie。看來我不能在本地主機上設置cookie,至少不能在Firefox上設置。我不記得那是對cookies的限制。我想了解這裏發生了什麼。

此外,我確實嘗試只是在主機文件中的域只是「開發」,但沒有奏效。我必須使用以.com或其他tld結尾的名稱才能使其工作。

+0

是的,它僅適用於完全限定的域名。我想這與爲多個域名設置同一個cookie的需要有關, www1.domain.com,www2.domain.com,因此您需要使用domain .domain.com設置cookie。 – empi 2009-01-28 21:35:32

+1

正如我在答覆中指出的那樣,RFC指出它與域名中的點數有關,而不是它是否完全合格。 – 2009-01-28 21:45:26

10

我認爲cookie的域名必須有兩個點(不包括TLD後的最後一個點)。所以.something.localhost沒問題,.google.com沒問題,但是.localhostgoogle.com不是。但看一眼RFC 2965就表明它比這更復雜......你可能想閱讀該文件,特別是第3.3節(和/或其前體,RFC 2109)。

+4

真的嗎?我認爲你可以爲example.com設置cookie,並且他們會發送到所有example.com域(例如www.example.com,實際上我們並不需要這個cookie在這裏,但是-you-sent-it-anyway-what-a-waste-of-bandwidth-eh.example.com) – 2010-01-31 07:26:02

11

我更新了jQuery插件,當它是本地主機時,不會將域添加到cookie。這解決了我的問題,而無需接觸主機文件。

var domain = (options.domain && options.domain !== 'localhost') ? '; domain=' + (options.domain) : ''; 
6

我正在使用代碼點火器,並設置域爲空字符串固定我的問題,同時在本地主機上的應用程序上工作。我相信這是更好的解決方案,因爲開發團隊中的每個人都不需要在Windows上混淆其主機文件。

生產域值可以放在代碼點火器的config.php中,當部署在現場。

3

最簡單的解決方案,我解決這個問題是使用127.0.0.1而不是本地主機;-) 這在Firefox中正常工作!

相關問題