Это может быть ошибка файла cookie Flash: Flash всегда отправляет файлы cookie IE независимо от браузера. Это проблема, например, когда вы используете проверку подлинности с помощью форм:
- Логин пользователя, который создает файл cookie сеанса.
- Пользователь обращается к компоненту 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).