firefox领导点在cookie问题

时间:2010-03-23 11:38:36

标签: asp.net

我们在使用Firefox和Cookie时遇到了烦人的问题。我们有以下域名:

sub1.mydomain.com sub2.mydomain.com sub3.mydomain.com otherdomain.com

我们已将我们的框架转换为多语言,并提供下拉菜单以在网站的任何时候更改语言。

代码库在上面的所有域中共享。

我们无法在所有“mydomain.com”网站上设置Cookie,它们必须位于每个子域中。为了实现这一点,我们在用户选择新语言时设置JavaScript cookie。当页面回发到服务器时,代码会选择它并将用户首选项设置为新的语言代码(这都是C#和ASP.NET)。

我们必须将主机设置为“subX.mydomain.com”,并将路径设置为cookie中的“/”,以便它只适用于子域和该域的所有部分。

除了FireFox之外,这在所有浏览器上都很有用。似乎firefox会预先将DOT附加到域的开头,所以“.subX.mydomain.com”。

当代码使用FireFox回发时,cookie始终为空。

有没有人遇到这种情况,(我想这不是那种罕见的情况)。我看过很多人说,从cookie中删除域名,但这对我们不起作用,因为我们有多个子域需要自己的cookie值。

修改

var d = new Date();
d.setYear(d.getYear() + <%# CookieLangYearExpireOffset %>);
document.cookie = '<%# CookieLangKey %>=' + langCode + '; expires=' + d.toUTCString() + '; domain=' + window.location.hostname + '; path=/';    
var currentUrl = location.href;
var questionMarkIndex = currentUrl.lastIndexOf('?');
if (questionMarkIndex > 0) {
    currentUrl = currentUrl + '&rand=' + Math.floor(Math.random() * 1001);
}
else {
   currentUrl = currentUrl + '?rand=' + Math.floor(Math.random() * 1001);
}
window.location.href = currentUrl;

服务器端代码部分只是服务器端和客户端使用相同的过期值和名称vaule。

由于

1 个答案:

答案 0 :(得分:4)

默认情况下,Domain设置为请求主机,该主机没有前导点。但是,根据RFC2109

  

Domain属性指定   cookie有效的域。   明确指定的域必须   总是以点开头。

如果您未指定域名该怎么办?它不会拿起子域吗?

编辑:我刚刚测试了设置一个cookie而没有指定域,它选择了我正在设置cookie的页面的子域。看起来如果你没有指定域,那么它应该可以工作。

编辑2:由于域开头的点不应在服务器上创建cookie null,请仔细检查您的代码是否在Firefox中运行。一个常见问题是将JavaScript放在<script type="jscript">标记中,而不是<script type="text/javascript">