ASP.NET Помощь! FireFox ест мои печенья! - PullRequest
2 голосов
/ 11 февраля 2010

IE работает нормально, а FireFox - нет.

Я устанавливаю куки на моей странице default.aspx:

    HttpCookie hc = new HttpCookie("guid", guid.ToString());
    hc.Expires = DateTime.Parse("12/12/2010");
    Response.Cookies.Add(hc);

Мой элемент управления загрузкой (я использую SWFUpload) отправляет файл upload.aspx.

На upload.aspx я звоню:

    if (Request.Cookies["guid"] != null)
    {
       // Do something.
    }

... мой файл cookie содержит только мою переменную сеанса ASP.NET. Есть идеи?

Ответы [ 4 ]

3 голосов
/ 12 февраля 2010

У меня возникла та же проблема при попытке загрузить файлы в Firefox через мое приложение Flex. Если вы также используете Flash, вы можете сделать то, что я сделал; если вы используете элементы управления HTML, это может применяться или не применяться.

То, что я сделал для решения проблемы Firefox, - это выдача одноразового токена на сервере, а затем отправка этого токена при загрузке (например, это может быть скрытое поле в форме). Если токен распознается при загрузке, загрузка обрабатывается, то срок действия токена истекает. Так что это в основном то, что вы делаете, только без использования куки.

1 голос
/ 11 февраля 2010

Это то, что я использовал для добавления / получения значений cookie. У меня работает в IE и FF

addCookie:

HttpCookie c = new HttpCookie("myCookie");
c.Expires = new DateTime(2050, 1, 1);
c.Values.Add("key", "value");

getCookie:

string value = Request.Cookies["myCookie"]["key"];
1 голос
/ 11 февраля 2010

За кулисами вы, вероятно, устанавливаете один и тот же файл 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";
0 голосов
/ 11 февраля 2010

Во-первых, есть конструктор безопасного типа для DateTime, который new DateTime(2010, 12, 12).

Во-вторых, вы используете разные имена для своих файлов cookie: guid против applicationGuid. Используйте либо не оба.

...