net中jquery uploadify上传控件在火狐浏览器 uploadifysession怎么取不到

jquery uploadify在火狐下无法上传的解决方案(.Net版) - 不讨喜小姐_ASP.NET_第七城市
jquery uploadify在火狐下无法上传的解决方案(.Net版) - 不讨喜小姐
走吧,一起来探个究竟。一、jquery uploadify自我介绍:(1)、大家好,我是jquery插件大家族中负责实现异步上传的插件,我不是唯一,只是较好用的一款。(2)、我的功能:支持单文件或多文件上传,可控制并发上传的文件数在服务器端支持各种语言与之配合使用,诸如PHP,.NET,Java……通过参数可配置上传文件类型及大小限制通过参数可配置是否选择文件后自动上传易于扩展,可控制每一步骤的回调函数(onSelect, onCancel……)通过接口参数和CSS控制外观Uploadify主页地址:/在该页面你可以了解到关于他的更多内容。(3)、我的用法:去,& search search,很多。二、firefox下我出故障了,是我的问题吗?jquery uploadify在ie下可以正常上传,在实现异步上传的时候,每一个文件在上传时都会提交给服务器一个请求。每个请求都需要安全验证,session和cookie的校验。是的,就是这样。由于jquery uploadify是借助flash来实现上传的,每一次向后台发送数据流请求时,ie会自动把本地cookie存储捆绑在一起发送给服务器。但firefox、chrome不会这样做,他们会认为这样不安全。哈,这就是原因。找到原因了,在让我们来明白两个概念:(1)、session:Session又称为会话状态,是Web系统中最常用的状态,用于维护和当前浏览器实例相关的一些信息。举个例子来说,我们可以把已登录用户的用户名放在Session中,这样就能通过判断Session中的某个Key来判断用户是否登录,如果登录的话用户名又是多少。我们知道,Session对于每一个客户端(或者说浏览器实例)是“人手一份”,用户首次与Web服务器建立连接的时候,服务器会给用户分发一个 SessionID作为标识。SessionID是一个由24个字符组成的随机字符串。用户每次提交页面,浏览器都会把这个SessionID包含在 HTTP头中提交给Web服务器,这样Web服务器就能区分当前请求页面的是哪一个客户端。那么,ASP.NET2.0提供了哪些存储SessionID的模式呢!(2)、Cookie,有时也用其复数形式Cookies,指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密)。三、解决方案在Global.asax文件中,编写如下代码:void Application_BeginRequest(object sender, EventArgs e){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.FormsCookieN&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_HttpContext.Current.Request.Cookies.Set(cookie);//重新设定请求中的cookie值,将服务器端的session值赋值给它}/*---------------------------Aspx页面端代码---------------------------------*/this.hfAuth.Value = Request.Cookies[FormsAuthentication.FormsCookieName] == null ? string.Empty : Request.Cookies[FormsAuthentication.FormsCookieName].Vthis.hfAspSessID.Value = Session.SessionID;把session值及身份验证值保存到客户端控件中,然后你就可以通过js获取这两个值,然后传给下面的插件js初始化程序。(之所以选择将session值放入到控件中存储,也是怕客户端禁用cookie的考虑。)/*-----------------------------以下是js代码----------------------------------*/InitUpload: function(auth, AspSessID) {$(&#uploadify&).uploadify({uploader: 'Scripts/jqueryplugins/Infrastructure/uploadify.swf',script: 'Handlers/ResourceHandler.ashx?OpType=UploadResource',cancelImg: 'Scripts/jqueryplugins/Infrastructure/cancel.png',queueID: 'fileQueue',sizeLimit: '',wmode: 'transparent ',fileExt: '*.zip,*.jpg, *.rar,*.doc,*.docx,*.xls,*.xlsx,*.png,*.pptx,*.ppt,*.pdf,*.swf,*.txt',auto: false,multi: true,scriptData: { ASPSESSID: AspSessID, AUTHID: auth },...........//更多配置项,您可以查看官方配置文档在插件初始化的时候,把本地记录下来的session值,以及身份验证值传给初始化方法,进行参数赋值,这样,每次异步请求上传文件的时候,相应的 session值就包含在请求文件中了。----------------------以上内容参见 /mbailing/archive//uploadify.htmluploadif 遇到的别的问题:ps1:ajax向ashx传参数的问题,默认情况下method的传值方式为post,script&可提供URL传递参数。用来传递get参数。例如:index.jsp?id=1&action=uploadify可以设置成:'script': 'index.jsp','scriptData':{'id':1,'action':'uploadify'},若要后台获取到scriptData中的参数,则method一定要设置为get。ps2:oncomplete返回值的参数。如下:onComplete: function(event, queueID, fileObj,response) {alert(response);&&}-------------以上内容参见&/pinnasky/archive//1750089.html
最新教程周点击榜
微信扫一扫JQuery&Uploadify&上传session问题
最近在项目中使用JQuery
Uploadify插件实现文件上传,很方便。但是问题是在非IE环境下会出现session丢失的情况,查了很多资料,发现原来非IE换进(Firefox,Chrome)使用flash来处理文件文件上传。在非IE环境下使用flash方式想服务器发起请求(具体细节我也不太清楚),会新生成一个session,如果要避免这个问题,需要把当前的sessionId作为形参传给servlet类,如下:
type=”text/javascript”&
$(document).ready(function() {
$(“#fileupload”).uploadify({
‘uploader’&&&&&&
: ’scripts/uploadify.swf’,
’script’&&&&&&&&
‘&%=path%&/my_upload.action;jsessionid=&%=session.getId()%&’,
//可以很有效的解决在ff下的session问题
‘cancelImg’&&&&&
: ’scripts/cancel.png’,
‘queueID’&&&&&&&
: ‘fileQueue’,
‘fileDataName’&& :
‘auto’&&&&&&&&&&
‘multi’&&&&&&&&&
‘buttonText’&&&&
: ‘BROWE’,
‘fileDesc’&&&&&&
: ‘支持格式:jpg/gif/jpeg/png/bmp.’,
‘fileExt’&&&&&&&
: ‘*.*.*.*.*.bmp’,
onAllComplete : function (){
alert(“上传完毕”);
onError: function(event, queueID, fileObj) {
alert(“文件:” + fileObj.name + “上传失败”);
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。jQuery上传插件Uploadify在FF中会创建新的session ,如何通过ID获取旧session - ITeye问答
&&&&&&&&& HttpServletRequest request=
&&&&&&&&&&&&&&&&& (HttpServletRequest)ctx.get(ServletActionContext.HTTP_REQUEST);
&&&&&&&&& HttpSessionContext& SessCon=& request.getSession(false).getSessionContext();
&&&&&&&&& HttpSession& Sess& =& SessCon.getSession(request.getParameter("SessionId"));
&&&&&&&&& 获取到Sess老是空值???????????????????????????
问题补充:我想问的是sessionid如何获取session
问题补充:还一个问题:Uploadify以http去访问,在FF、谷歌浏览器里是好的。但是以https就提示IO ERROR。求解答?
木有用过https协议
session和你当前的request实例绑定的
HttpSession& 这样取不行吗?
HttpServletRequest request= (HttpServletRequest)ctx.get(ServletActionContext.HTTP_REQUEST);
HttpSession
request.getSession();//取到session
session.getId();//取到sessionId
通过jsessionid传值
如:
你的上传路径是
/abc.action?method=up
那么修改你的上传路径为
/abc.jsessionid=F2F03BD03B7A007CCA07EAB?method=up
jsessionid的值需要你在当前页面取出
已解决问题
未解决问题uploadify在Firefox下丢失session问题的解决方法
字体:[ ] 类型:转载 时间:
在用uploadify上传插件时遇到了一个问题,在读session时认为没有权限而被拦截了,后来在后台打印登录时产生session的id和上传时读取session的id,解决方法如下,感兴趣的朋友可以了解下
今天在用uploadify上传插件时遇到了一个问题,由于我后台做了权限管理,每个请求都有去读session判断权限,但用这个插件时发现登录后上传不了,原因是在读session时认为没有权限而被拦截了,后来在后台打印登录时产生session的id和上传时读取session的id,果然不一样,在网上搜索了一番,还真有不少人遇到这个问题,现把解决方案贴出来: 先说说我的环境,后台是用JSP,uploadify的版本是3.2 在JSP页面中的配置:
代码如下: &script type="text/javascript"& $(document).ready(function() { $("#fileupload").uploadify({ 'swf' : '/uploadify/scripts/uploadify.swf', 'uploader' : '/jsessionid=${pageContext.session.id}', 'auto' : true, 'multi' : false, 'buttonText' : 'BROWSE', 'fileDesc' : '支持格式:jpg/gif/jpeg/png/bmp.', 'fileExt' : '*.*.*.*.*.bmp', 'onUploadSuccess': onUploadSuccess }); }); &/script&
最关键的就是红字那部份了,要注意的是jsessionid前面那个是个分号而不是问号,写成问号就作为参数传递了,希望能帮到大家少走弯路
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具添加session:C# code Session.Remove("UserID");
Session.Add("UserID", "ssss");
获取session:C# code
string name = context.Session["UserID"].ToString();
在ie 中正常可以读取的到。
在线等 。。。。。。。。。。。。。。。。。。。。。。。。。
--------------------------------------
C# code public void ProcessRequest(HttpContext context)
context.Response.ContentType = "text/plain";
context.Response.Charset = "utf-8";
//获取上传文件队列
HttpPostedFile oFile = context.Request.Files["Filedata"];
if (oFile != null)
string name = context.Session["UserID"].ToString();
string topDir = context.Request["folder"];
// 获取uploadify的folder,在此示例中,了上传到 Files/
// 检测并创建目录:当月上传的文件放到以当月命名的文件夹中,例如2011年11月的文件放到下的 /Files/201111 里面
string dateFolder = HttpContext.Current.Server.MapPath(topDir) + "\\" + DateTime.Now.Date.ToString("yyyyMM");
if (!Directory.Exists(dateFolder))
// 检测是否存在磁盘目录
Directory.CreateDirectory(dateFolder);
// 不存在的情况下,创建这个文件目录 例如 C:/www/Files/201111/
// 使用Guid命名文件,确保每次文件名不会重复
string guidFileName=Guid.NewGuid() + Path.GetExtension(oFile.FileName).ToLower();
// 保存文件,注意这个可是完整路径,例如C:/wwwroot/Files/b2ce5b-88af-405e-f48cf.jpg
oFile.SaveAs(dateFolder + "\\" + guidFileName);
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////// TODO 在此,您可以添加自己的业务逻辑,比如保存这个文件信息到
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 上面的所有操作顺利完成,你就完成了一个文件的上传(和保存信息到数据库),返回成功,在此我返回1,表示上传了一个文件
context.Response.Write("1");
context.Response.Write("0");
}JScript code
&script type="text/script"&
$(document).ready(function () {
$("#uploadify").uploadify({
'uploader': 'Scripts/jquery.uploadify-v2.1.4/uploadify.swf',
// 做上传的插件
'script': 'FilesUpLoad.ashx',
// 处理页面(支持多种语言,例如您可以修改成、ASP、JSP等语言)
'cancelImg': 'Scripts/jquery.uploadify-v2.1.4/cancel.gif',
// 关闭按钮的地址
'folder': 'Files/', // 保存文件的文件夹
'queueID': 'fileQueue',
'fileDesc': '请选择你里格式为*.*.*.*.*.gif的文件',
// 描述(必须和fileExt一起使用)
'fileExt': '*.*.*.*.*.gif',
// 允许浏览上传的文件扩展名(必须和fileDesc一起使用)
'sizeLimit': , // 文件大小限制100M(注意,在ASP.NET中Web.Config也要配置)
'auto': false,
'multi': true,
// 是否支持多文件上传
'buttonText': 'SELECT FILE',
// 按钮上的文本
'onError': function (a, b, c, d) {
if (d.status == 404)
alert('Could not find upload script.');
else if (d.type === "HTTP")
alert('error ' + d.type + ": " + d.status);
else if (d.type === "File Size")
alert("文件:" + c.name + ' ' + ' 已超出文件大小限制!');
alert('error ' + d.type + ": " + d.info);
'onComplete': function (a, b, c, d, e) {
// 完成一个上传后执行
$("#div_Msg").addClass("div_Msg").text("剩余 " + e.fileCount + " 个文件正在上传 . . .");
'onAllComplete': function (a, b) {
// 完成所有上传后执行
$("#div_Msg").addClass("div_Msg").text("恭喜您 , 所选的 " + b.filesUploaded + " 个文件已成功上传 ! ");
'onSelectOnce': function (a, b) {
// 浏览一次本机文件后执行
$("#div_Msg").addClass("div_Msg").text("据统计:总共 " + b.fileCount + " 个可上传文件 ! ");
'onCancel': function (a, b, c, d) { // 取消一个将要上传的文件后执行
$("#div_Msg").addClass("div_Msg").text("据统计:总共 " + d.fileCount + " 个可上传文件 ! ");
});// --&&/script&

我要回帖

更多关于 火狐浏览器session 的文章

 

随机推荐