2009-01-28 57 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中正常工作!

相关问题