我们在使用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。
由于
答案 0 :(得分:4)
默认情况下,Domain设置为请求主机,该主机没有前导点。但是,根据RFC2109:
Domain属性指定 cookie有效的域。 明确指定的域必须 总是以点开头。
如果您未指定域名该怎么办?它不会拿起子域吗?
编辑:我刚刚测试了设置一个cookie而没有指定域,它选择了我正在设置cookie的页面的子域。看起来如果你没有指定域,那么它应该可以工作。
编辑2:由于域开头的点不应在服务器上创建cookie null
,请仔细检查您的代码是否在Firefox中运行。一个常见问题是将JavaScript放在<script type="jscript">
标记中,而不是<script type="text/javascript">
。