2019独角兽企业重金招聘Python工程师标准>>>

基于jQuery和Flash的多文件上传插件uploadify的确很好用,具体配置和使用方法见以前的一篇文章: 《一款基于jQuery的文件上传插件(.NET版)》。但今天在用这个插件的时候遇到了一个非常头痛的问题,上传文件的时候,我后台的session突然都丢失了,我进入调试去查看session变量发现为null。悲剧,难道我不能用这个插件了吗?当然不可能,这么好的东西当然要用起来,于是就去找解决方案了。

终于,答案有了,原来一般情况下(非IE浏览器),因为诸如uploadify,swfupload采用的都是flash客户端,这样它们产生的useragent与用户使用浏览器的 user-agent必然不同。所以,虽然用户登录了你的系统产生了一个session,但是当触发上传程序时会产生另一个session(在上述 useragent选项开启的情况下)。所以,不是session丢失了,而是当你上传文件时,CI为uploadify另外创建了一个session。好了,既然找到问题的根源,我们就想办法让服务器在session判空之前将session值手动传递过去。

在ASP.NET中的解决方案如下:

在上传的那个页面中加入以下代码

var auth = "<% = Request.Cookies[FormsAuthentication.FormsCookieName]==null ? string.Empty : Request.Cookies[FormsAuthentication.FormsCookieName].Value %>" ;
var ASPSESSID = "<%= Session.SessionID %>" ;

然后初始化插件的代码改成如下形式

$( "#fileInput1" ).uploadify({'uploader' : '/Scripts/uploader/uploadify.swf' ,'method' : 'GET' ,'script' : '/mystudio/GoUploadAvatar' ,'cancelImg' : '/Scripts/uploader/cancel.png' ,'sizeLimit' : 2048000,'multi' : false ,'fileDesc' : '选择jpg,png,gif' ,'fileExt' : '*.jpg;*.png;*.gif' ,'onComplete' : function (e, queueId, fileObj, response, data) {},'onSelectOnce' : function (e, data) {$( '#fileInput1' ).uploadifySettings( 'scriptData' , { 'ASPSESSID' : ASPSESSID, 'AUTHID' : auth });}});

注意上面有一句,很关键

$( '#fileInput1' ).uploadifySettings( 'scriptData' , { 'ASPSESSID' : ASPSESSID, 'AUTHID' : auth });

接下来我们必须在服务端Session判空并创建之前,将传递过来的SessonID强制赋给当前请求的Cookies,这样服务端就认为还是原来的Session传递过来了。具体做法我们可以在Global.asax文件中加入如下代码

protected void Application_BeginRequest( object sender, EventArgs e){/* 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 (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{}try{string auth_param_name = "AUTHID" ;string auth_cookie_name = 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{}}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);}

这时候你访问上传文件的那个页面时可能会报“会话状态已创建一个会话 ID,但由于响应已被应用程序刷新而无法保存它”的错误,这时,你可以在web.config文件改变session的存储方式,一般默认都是以 “inproc”存储的,我们把它改成stateserver模式,即在system.web节点下加入

< sessionstate mode = "StateServer" stateconnectionstring = "tcpip=127.0.0.1:42424" timeout = "30" ></ sessionstate >

转载于:https://my.oschina.net/chengkuan/blog/61331

【转】jquery文件上传插件uploadify在.NET中session丢失的解决方案相关推荐

  1. jquery文件上传插件uploadify 讲解

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 1.名词解释: tracker服务器:中文叫做跟踪器,主要做调度工作,在访问上起负载均衡的作用.(t ...

  2. jquery文件上传插件 uploadify java_jQuery文件上传插件Uploadify使用指南

    对于HTML5版本会比较好的支持手机浏览器,避免苹果手机Safari浏览器不支持 Flash,主要特性:支持多文件上传.HTML5版本可拖拽上传.实时上传进度条显示.强大的参数 定制功能,如文件大小. ...

  3. 修改jquery文件上传插件uploadify的英文为中文

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 效果: 对于这种样式的问题,我都是简单粗爆的解决: 找到uploadify的js文件,通常不是js, ...

  4. jQuery 文件上传插件:uploadify、swfupload

    jQuery 文件上传插件: uploadify.swfupload

  5. jquery文件上传插件|进度条

    jquery文件上传插件|进度条 一.Uploadify 官网:http://www.uploadify.com/ 下载地址:http://down.51cto.com/data/577863 详细参 ...

  6. jquery 文件上传插件_10个jQuery文件上传插件

    jquery 文件上传插件 这篇热门文章于2016年7月更新,以反映文件上传插件的当前状态. 有关旧文章的评论已删除. 使用Ajax实施文件上传可能非常困难,特别是如果您需要拖放支持,图像预览或进度条 ...

  7. 20+ 个很棒的 jQuery 文件上传插件或教程(此文值得“推荐”和“收藏”)

    文件上传是网站很常见的功能之一,通过使用 jQuery 可以让上传过程更加人性化,更好的用户体验.本文介绍20个jQuery的文件上传插件,其中有一些是教程. 1. Plupload Plupload ...

  8. 基于jquery的上传插件Uploadify 3.1.1在MVC3中的使用

    Uploadify是JQuery的一个文件上传插件,实现的效果非常不错,目前已经更新到Version3.1.1,官方提供的实例是php版本的,本文将介绍Uploadify在MVC3中的使用,您可以点击 ...

  9. jQuery 异步上传插件 Uploadify 使用 (Java平台)

    Uploadify是JQuery的一个上传插件,实现的效果非常不错,带进度显示.而且是Ajax的,省去了自己写Ajax上传功能的麻烦.不过官方提供的实例时php版本的,本文将详细介绍Uploadify ...

最新文章

  1. 小时候的小霸王游戏!坦克大战 超级玛丽 魂斗罗 忍者神龟 都有!
  2. sklearn支持gpu_Keras Sklearn随机搜索GPU OOM
  3. luogu P4512 多项式除法 (模板题、FFT、多项式求逆)
  4. shell脚本注意点
  5. Android AudioTrack/AudioRecord -wav文件读取3
  6. HR怎么从面试中了解程序员的真实水平?需要面试的程序员,注意了!
  7. vue 中 computed 计算属性 的用法
  8. C语言入门(15道经典题目)
  9. 角度单位中角分、角秒的进制转换
  10. Python基础简答题
  11. Teams 的 Meeting App
  12. mysql的left join索引没_left join 没有走索引原因分析
  13. 华为鸿蒙荣耀壁纸,华为Mate 40全新主题、系统壁纸曝光:高清无水印
  14. 【python爬虫】学习笔记1-爬取某网站妹子图片
  15. 微信公众号01: ase实现access_token的存储和被动刷新
  16. Github标星25K+超火的Android实战项目,2022BTAJ面试真题详解
  17. The ip address is being used by a static-MAC user
  18. A-level 课程:最受欢迎和最不受欢迎的学科
  19. 什么是单工通信、半双工通信、全双工通信?3种通信方式的区别是什么?
  20. HDLBits-Lemmings4

热门文章

  1. 7教程统计意义_学渣的医学统计学自救笔记(一)
  2. 精通lambda表达式:java多核编程_Java8 Lambda表达式和流操作如何让你的代码变慢5倍...
  3. java二进制 中文_Java 实现中文与二进制代码互转
  4. jq获得当前元素id
  5. 场效应管P-MOS N-MOS
  6. Redis百万级别数据迁移
  7. 智能一代云平台(三十九):不同服务之间数据调用的一些思考
  8. 地平线获近亿美元A+轮融资,AI时代的英特尔被英特尔领投
  9. POJ 3111 K Best 贪心 二分
  10. PureFtp的安装与配置