解決文件上傳插件Uploadify在火狐瀏覽器下,Session丟失的問題


因為在火狐瀏覽器下Flash發送的請求不會帶有cookie,所以導致后台的session失效。

解決的方法就是手動傳遞SessionID到后台。

 $("#fileresultfiles").uploadify({
                swf: '/Scripts/uploadify/uploadify.swf',
                uploader: '/UploadFiles.ashx',
                queueID: 'fileQueue',
                buttonText: '附件上傳',
                auto: true,
                debug: false,
                removeCompleted: true,
                multi: true,
                displayData: 'speed',
                uploadLimit: 20,
                fileSizeLimit: '500MB',
                formData: {
                    'ASPSESSID': '<%=Session.SessionID %>',
                    'primarykey': $("#<%=hid_resultStrId.ClientID %>").val(),
                },
                onQueueComplete: function (queueData) {
                    //隊列上傳完成后,ajax獲取上傳的所有列表
                    AjaxRequestFile();
                },
                onSelectError: function (file, errorCode, errorMsg) {
                    var errorMsg = "";
                    if (errorCode == "QUEUE_LIMIT_EXCEEDED") {
                        errorMsg = "文件數量過多!";
                    }
                    if (errorCode == "-110") {
                        errorMsg = "文件大小超出限制!";
                    }
                    $('#' + file.id).find('.data').html(' errorMsg');
                },
                onUploadSuccess: function (file, data, response) {
                    if (data != "OK") {
                        $("#fileresultfiles").uploadify('cancel', '*');
                        alert(data);
                    }
                }
            });

 'ASPSESSID': '<%=Session.SessionID %>'這句就是把SessionID傳遞過去

然后在Global.asax文件中監聽每一個請求,如果有SessionID傳過來就重新設置cookie

 

        protected void Application_BeginRequest(object sender, EventArgs e)
        {
            //為了Uploadify在谷歌和火狐下不能上傳的BUG
            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
            {
            }
        }

        private void UpdateCookie(string cookie_name, string cookie_value)
        {
            HttpCookie cookie = HttpContext.Current.Request.Cookies.Get(cookie_name);
            if (null == cookie)
            {
                cookie = new HttpCookie(cookie_name);
                cookie.Value = cookie_value;
                HttpContext.Current.Request.Cookies.Set(cookie);//重新設定請求中的cookie值,將服務器端的session值賦值給它
            }
        }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM