Firefox и объект переехал сюда - PullRequest
0 голосов
/ 10 сентября 2010

У нас есть веб-сайт asp.net, который использует флэш-ролик для загрузки HTTP-файлов, он без проблем работает в IE.При использовании Firefox он не загружается. Отладка HTTP показала, что страница, которую мы публикуем, возвращает следующее:

HTTP 302

<html><head><title>Object moved</title></head><body>
<h2>Object moved to <a href="%2fproject_name3%2fDefault.aspx%3fReturnUrl%3d%252fproject_name3%252ffiles%252fuploader.aspx">here</a>.</h2>
</body></html>

Это уже давно нас беспокоило ибыл бы признателен за любую помощь:)

1 Ответ

1 голос
/ 10 сентября 2010

Это может быть ошибка файла cookie Flash: Flash всегда отправляет файлы cookie IE независимо от браузера. Это проблема, например, когда вы используете проверку подлинности с помощью форм:

  1. Логин пользователя, который создает файл cookie сеанса.
  2. Пользователь обращается к компоненту Flash (например, компоненту загрузки), который отправляет запросы на сервер, а запросы обращаются к сеансу или на них влияет проверка подлинности с помощью форм.

Вызов 2 завершится неудачно, поскольку на сервер не отправляются файлы cookie сеанса, поскольку файл cookie сеанса находится в файлах cookie Firefox, а Flash отправляет файлы cookie IE. В вашем случае кажется, что пользователь перенаправлен на страницу входа (которая выглядит как /default.aspx).

Решение этой проблемы - заставить компонент Flash отправлять файлы cookie в качестве параметров публикации, а затем заново создавать файлы cookie в HttpHandler из параметров публикации. Я могу опубликовать пример кода, если вам это нужно.

Это распространенная проблема с компонентом SwfUpload, который я часто использую. Я также использую его внутри umbrao, поэтому я также воссоздаю файлы cookie для входа в систему umbraco.

Обновление: вот исходный код используемого HttpModule:

using System;
using System.Collections.Specialized;
using System.Configuration;
using System.Web;
using System.Web.Configuration;
using System.Web.Security;

namespace cimkey.utility
{
public class SwfUploadModule : IHttpModule
{
    private NameValueCollection paramNameToCookieName;

    private void BuildParamNameToCookieNameList()
    {
        if (paramNameToCookieName != null)
            return;

        // ASP.NET session.
        const string session_param_name = "ASPSESSID";
        SessionStateSection SessionSettings = (SessionStateSection)ConfigurationManager.GetSection("system.web/sessionState");
        string session_cookie_name = SessionSettings.CookieName; // "ASP.NET_SESSIONID";

        // Forms authentication.
        const string auth_param_name = "AUTHID";
        string auth_cookie_name = FormsAuthentication.FormsCookieName;

        paramNameToCookieName = new NameValueCollection
        {
            {   session_param_name,     session_cookie_name }, 
            {   auth_param_name,        auth_cookie_name }, 
            {   "umbracoMemberLogin",   "umbracoMemberLogin"}, 
            {   "umbracoMemberId",      "umbracoMemberId"   }, 
            {   "umbracoMemberGuid",    "umbracoMemberGuid" }
        };
    }

    public void Init(HttpApplication context)
    {
        BuildParamNameToCookieNameList();

        context.BeginRequest += context_BeginRequest;
    }

    public void Dispose()
    {
    }

    void context_BeginRequest(object sender, EventArgs e)
    {
        /* Fix for the Flash Player Cookie bug in Non-IE browsers.
        * Since Flash Player always sends the IE cookies even in FireFox
        * we have to bypass the cookies by sending the values as part of the POST or GET
        * and overwrite the cookies with the passed in values.
        *
        * The theory is that at this point (BeginRequest) the cookies have not been ready by
        * the Session and Authentication logic and if we update the cookies here we'll get our
        * Session and Authentication restored correctly
        */

        try
        {
            foreach (string paramName in paramNameToCookieName.Keys)
            {
                string cookieName = paramNameToCookieName[paramName];

                if (HttpContext.Current.Request.Form[paramName] != null)
                {
                    UpdateCookie(cookieName, HttpContext.Current.Request.Form[paramName]);
                }
                else if (HttpContext.Current.Request.QueryString[paramName] != null)
                {
                    UpdateCookie(cookieName, HttpContext.Current.Request.QueryString[paramName]);
                }
            }

        }
        catch (Exception)
        {
        }
    }

    static void UpdateCookie(string cookie_name, string cookie_value)
    {
        HttpCookie cookie = HttpContext.Current.Request.Cookies.Get(cookie_name);
        if (cookie != null)
        {
            cookie.Value = cookie_value;
            HttpContext.Current.Request.Cookies.Set(cookie);
        }
        else
        {
            cookie = new HttpCookie(cookie_name, cookie_value);
            HttpContext.Current.Request.Cookies.Add(cookie);
        }
    }
}
}

Измените его, чтобы отслеживать ваши куки, в настоящее время он проверяет куки на

  • Сеанс ASP.NET
  • Аутентификация форм
  • печенье Umbraco

Проверяет как параметры записи, так и параметры запроса. Ваш клиентский код должен убедиться, что эти параметры отправлены на сервер (я отправляю эти параметры в вызове POST jQuery ajax).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...