За кулисами вы, вероятно, устанавливаете один и тот же файл cookie дважды. Firefox и IE, вероятно, различаются в зависимости от того, какой из них выбрать. ASP.NET любит автоматически устанавливать «guid» cookie во многих веб-приложениях. Выбрав это имя, вы неизбежно создадите напряжение между автоматической логикой и вашей собственной. Лучший способ увидеть, что происходит, - загрузить в Firefox надстройку Live HTTP Headers . Это позволит вам точно узнать, какие команды cookie отправляются конечному пользователю. Вы можете также вызвать похожую проблему, чтобы увидеть ее воссозданной:
HttpCookie hc = new HttpCookie("testcookie", "xyz");
hc.Expires = DateTime.Parse("12/12/2010");
Response.Cookies.Add(hc);
hc = new HttpCookie("testcookie", "abc");
Response.Cookies.Add(hc);
В результате получается HTTP-заголовок с двумя Set-Cookie
вызовами:
Set-Cookie: testcookie=xyz; expires=Sun, 12-Dec-2010 07:00:00 GMT; path=/
Set-Cookie: testcookie=abc; expires=Sun, 12-Dec-2010 07:00:00 GMT; path=/
Оттуда браузер должен решить, является ли первое или последнее окончательным значением. Если два браузера делают это по-разному, вы попадаете в описанную вами ситуацию. Установите надстройку Live HTTP Headers и найдите что-то похожее. По крайней мере, вы, вероятно, должны считать «guid» именем файла cookie, которое следует использовать в приложении форм ASP.NET.
Если вам абсолютно необходимо, чтобы несколько мест устанавливали один и тот же файл cookie, попробуйте сначала найти его (создайте новый, если он не существует). Это позволит вам переопределить значение существующего файла cookie, а не создавать другой файл cookie с тем же именем.
HttpCookie hc = Response.Cookies["testcookie"];
if (null == hc) {
hc = new HttpCookie("testcookie");
Response.Cookies.Add(hc);
}
hc.Value = "xyz";