Uploadify ashx file Context.Session gets null

前端 未结 5 1075
粉色の甜心
粉色の甜心 2020-12-14 05:18

I have a file upload in my site which is done using uploadify it uses a ashx page to upload file to database.It works fine in IE but in Mozilla the context.Session is gettin

5条回答
  •  忘掉有多难
    2020-12-14 05:52

    You need to add sessionId to uploadify post params and restore ASP.NET_SessionId cookie on the server side on global.asax at OnBeginRequest. It is actually bug with flash and cookies.

    I have created module for session and auth cookie restore, to get work flash and asp.net session, so i think it will be useful for your:

    public class SwfUploadSupportModule : IHttpModule
    {
        public void Dispose()
        {
            // clean-up code here.
        }
    
        public void Init(HttpApplication application)
        {
            application.BeginRequest += new EventHandler(OnBeginRequest);
        }
    
        private void OnBeginRequest(object sender, EventArgs e)
        {
            var httpApplication = (HttpApplication)sender;
    
            /* we guess at this point session is not already retrieved by application so we recreate cookie with the session id... */
            try
            {
                string session_param_name = "ASPSESSID";
                string session_cookie_name = "ASP.NET_SessionId";
                if (httpApplication.Request.Form[session_param_name] != null)
                {
                    UpdateCookie(httpApplication, session_cookie_name, httpApplication.Request.Form[session_param_name]);
                }
                else if (httpApplication.Request.QueryString[session_param_name] != null)
                {
                    UpdateCookie(httpApplication, session_cookie_name, httpApplication.Request.QueryString[session_param_name]);
                }
            }
            catch
            {
            }
    
            try
            {
                string auth_param_name = "AUTHID";
                string auth_cookie_name = FormsAuthentication.FormsCookieName;
    
                if (httpApplication.Request.Form[auth_param_name] != null)
                {
                    UpdateCookie(httpApplication, auth_cookie_name, httpApplication.Request.Form[auth_param_name]);
                }
                else if (httpApplication.Request.QueryString[auth_param_name] != null)
                {
                    UpdateCookie(httpApplication, auth_cookie_name, httpApplication.Request.QueryString[auth_param_name]);
                }
            }
            catch
            {
            }            
        }
    
        private void UpdateCookie(HttpApplication application, string cookie_name, string cookie_value)
        {
            var httpApplication = (HttpApplication)application;
    
            HttpCookie cookie = httpApplication.Request.Cookies.Get(cookie_name);
            if (null == cookie)
            {
                cookie = new HttpCookie(cookie_name);
            }
            cookie.Value = cookie_value;
            httpApplication.Request.Cookies.Set(cookie);
        }
    }
    

    Also than you need register above module at web.config:

    
      
        
      
    
    

提交回复
热议问题