西西软件园多重安全检测下载网站、值得信赖的软件下载站!
软件
软件
文章
搜索

首页编程开发ASP.NET → .NET中jquery文件上传uploadify插件session丢失的解决方法

.NET中jquery文件上传uploadify插件session丢失的解决方法

相关软件相关文章发表评论 来源:西西整理时间:2011/4/11 23:06:54字体大小:A-A+

作者:西西点击:1653次评论:2次标签: jquery

  • 类型:编程辅助大小:109KB语言:中文 评分:5.0
  • 标签:
立即下载

基于jQuery和Flash的多文件上传插件uploadify的确很好用。但今天在用这个插件的时候遇到了一个非常头痛的问题,上传文件的时候,我后台的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 %>";

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

view sourceprint?$("#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>

OK,问题解决,虽然看起来解决这个问题比较麻烦(不知道在其他网站中怎么弄,至少在.NET中比较麻烦),但这么好的一个文件上传插件,这样做很值得。希望能给遇到同样问题的朋友一点帮助。当然如果你有更好的解决方案,可以留言告诉我,不胜感激。

    html编辑器
    (73)html编辑器
    我们做网页的时候最难找的就是编辑器,网上找一个吧,要不是图片上传错误,就是到处都是错误,垃圾太多.大家都需要一个简单,速度快的.西西为您提供最好用的编辑器一站式下载编辑器定义编辑器指的是一类编辑制作工具,可自定义窗囗,编辑主题索引,可选择添搜索页,无任何不自由。编辑器哪个好用小编个人比较喜欢使用和,这两款编辑器软件都有不错的表现。至于编辑器哪个好用,这就要根据你的个人需求去选择对应的编辑器啦...更多>>
    dreamweaver cs6
    (14)dreamweaver cs6
    新版本使用了自适应网格版面创建页面,在发布前使用多屏幕预览审阅设计,可大大提高工作效率。改善的性能,更高效地传输大型文件。实时视图和多屏幕预览面板可呈现代码,更能够检查自己的工作。曾经风靡一时的网页三剑客成员之一是目前应用最广的网页制作软件,原本是由公司所开发的著名网站开发工具,随被收购后,改名为。它是第一套针对专业网页设计师特别发展的视觉化网页开发工具,以及在之后推出的针对专业网页图像设计的,三者...更多>>

    相关评论

    阅读本文后您有什么感想? 已有人给出评价!

    • 8 喜欢喜欢
    • 3 顶
    • 1 难过难过
    • 5 囧
    • 3 围观围观
    • 2 无聊无聊

    热门评论

    最新评论

    第 3 楼 江苏镇江电信 网友 客人 发表于: 2014/12/2 9:30:53
    这网站.... 真二,投票竟然能多次重复投....!!!

    支持( 0 ) 盖楼(回复)

    第 2 楼 广东教育网 网友 客人 发表于: 2011/9/7 13:26:04

    引用( 浙江杭州铁通 客人 2011-5-25 16:30:11

    这网站.... 真二,投票竟然能多次重复投....!!!

    支持( 0 ) 盖楼(回复)

    第 1 楼 浙江杭州铁通 网友 客人 发表于: 2011/5/25 16:30:11
    这网站.... 真二,投票竟然能多次重复投....!!!

    支持( 4 ) 盖楼(回复)

    发表评论 查看所有评论(2)

    昵称:
    表情: 高兴 可 汗 我不要 害羞 好 下下下 送花 屎 亲亲
    字数: 0/500 (您的评论需要经过审核才能显示)