解决文件上传插件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值赋值给它
            }
        }
时间: 2024-09-29 19:33:42

解决文件上传插件Uploadify在火狐浏览器下,Session丢失的问题的相关文章

支持多文件上传的jQuery文件上传插件Uploadify

支持多文件上传的jQuery文件上传插件Uploadify,目前此插件有两种版本即Flash版本和HTML5版本,对于HTML5版本会比较好的支持手机浏览器,避免苹果手机Safari浏览器不支持Flash,主要特性:支持多文件上传.HTML5版本可拖拽上传.实时上传进度条显示.强大的参数定制功能,如文件大小.文件类型.按钮图片定义.上传文件脚本等. Flash版本使用方法: 1.加载JS和CSS ? 1 2 3 <script src="jquery/1.7.1/jquery.min.js

强大的支持多文件上传的jQuery文件上传插件Uploadify

支持多文件上传的jQuery文件上传插件Uploadify,目前此插件有两种版本即Flash版本和HTML5版本,对于HTML5版本会比较好的支持手机浏览器,避免苹果手机Safari浏览器不支持Flash,主要特性:支持多文件上传.HTML5版本可拖拽上传.实时上传进度条显示.强大的参数定制功能,如文件大小.文件类型.按钮图片定义.上传文件脚本等. Flash版本使用方法: 1.加载JS和CSS ? 1 2 3 <script src="jquery/1.7.1/jquery.min.js

文件上传插件Uploadify在Struts2中的应用,完整详细实例

->最近由于项目需要使用到一个上传插件,在网上发现uploadify挺不错,所以决定使用它,但是官网文档和例子是php的,而项目是SSI框架的,所以自己对uploadify在struts2中的使用进行了一番研究,最终实现了.发现网上关于这方面的资料很少,而且有的一两篇例子还不大全,网友提问质疑很多,所以,下面我特将我的代码公布: --------------------------------------------------------------------- 步骤一: 到官网上下载upl

文件上传插件uploadify详解

官网:http://www.uploadify.com/ 基于jquery的文件上传控件,支持ajax无刷新上传,多个文件同时上传,上传进行进度显示,删除已上传文件. 要求使用jquery1.4或以上版本,flash player 9.0.24以上. 有两个版本,一个用flash,一个是html5.html5的需要付费~所以这里只说flash版本的用法.

关于jquery文件上传插件 uploadify 3.1的使用

要使用uplaodify3.1,自然要下载相应的包,下载地址http://www.uploadify.com/download/,这里有两种包,一个是基于flash,免费的,一个是基于html5,需要付费,我这里所说的也是前一种.当然现在可能已经不再是3.1版本了,估计是3.2了.不过,差别不会太大! 首先在页面中引入一下文件: <link rel="stylesheet" type="text/css" href="css/uploadify.cs

文件异步上传,多文件上传插件uploadify

本文中使用java作为例子 uploadify下载 http://files.cnblogs.com/chyg/uploadify.zip jsp页面中需要引入: <script type="text/javascript" src="jquery.uploadify.js"></script> 主要js代码: $("#sysLogo").uploadify({ 'uploader': '${ctx}/web/module

关于jquery文件上传插件&#160;uploadify&#160;3.1的使用

要使用uplaodify3.1,自然要下载相应的包,下载地址http://www.uploadify.com/download/,这里有两种包,一个是基于flash,免费的,一个是基于html5,需要付费,我这里所说的也是前一种.当然现在可能已经不再是3.1版本了,估计是3.2了.不过,差别不会太大!    首先在页面中引入一下文件:    <link rel="stylesheet" type="text/css" href="css/upload

uploadify多文件上传插件

这个插件是兼容IE8及以上版本的,实现了基本功能,底部有下载连接 代码如下: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head> <title>uploadify多文件上传插件使用</title> <meta http-equ

jquery上传插件uploadify 报错http error 302 解决方法之一

前段时间用到jquery上传插件uploadify时,始终出现系统报出 http error 302 的错误. 网上大量搜集信息,基本上都是说session值丢失的问题,根据网友提供的解决方案进行修改,问题并没有解决. 因此,不排除这是解决302错误的解决方法之一,但是我接下来提出另一解决方案,考虑到异步传输的问题,供大家参考(反正我是成功了). 首先是uploadify初始化: $(function() {           $('#projectfile').uploadify({