Uploads com Flash

Pra quem precisa utilizar o flash como componente de upload, para navegadores não IE, a Adobe (ou os navegadores) nos presenteia com um bug irritante. O flash não dá post dos cookies. Então se você utiliza autenticação baseada em cookies, quando o flash der post no seu arquivo, provavelmente a autenticação dele irá falhar. Isso provavelmente acontecerá em qualquer server-side.

Pra quem está com asp.net, a solução é postar junto com seu arquivo o seu AuthID e SessionID, e no Begin Request, setá-los com o seguinte código:

/// <summary>
///  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
///
/// </summary>
public static void FixFlashCookieBug()
{

try
{

string session_param_name = “ASPSESSID”;
string session_cookie_name = “ASP.NET_SESSIONID”;

if (HttpContext.Current.Request.Form[session_param_name] != null)

UpdateCookie(session_cookie_name, HttpContext.Current.Request.Form[session_param_name]);

else if (HttpContext.Current.Request.QueryString[session_param_name] != null)

UpdateCookie(session_cookie_name, HttpContext.Current.Request.QueryString[session_param_name]);

}
catch (Exception)
{
}

try
{

string auth_param_name = “AUTHID”;
string auth_cookie_name = System.Web.Security.FormsAuthentication.FormsCookieName;

if (HttpContext.Current.Request.Form[auth_param_name] != null)

UpdateCookie(auth_cookie_name, HttpContext.Current.Request.Form[auth_param_name]);

else if (HttpContext.Current.Request.QueryString[auth_param_name] != null)

UpdateCookie(auth_cookie_name, HttpContext.Current.Request.QueryString[auth_param_name]);

}
catch (Exception)
{
}

}

private static void UpdateCookie(string cookie_name, string cookie_value)
{

HttpCookie cookie = HttpContext.Current.Request.Cookies.Get(cookie_name);

if (cookie == null)

cookie = new HttpCookie(cookie_name, cookie_value);

else

cookie.Value = cookie_value;

cookie.Value = cookie_value;
HttpContext.Current.Request.Cookies.Set(cookie);

}

Chame FixFlashCookieBug no BeginRequest de um HttpModule ou no Global.asax. Lembrando que você só precisa chamar este método em um POST ou GET do flash.

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s