百度空间 | 百度首页 
 
查看文章
 
flash上传文件的cookie问题
2009-10-22 23:38
上传文件常用的方法是html的file控件(即<input type="file">这种标记),另一种办法就是用flash了。

用html上传文件的好处是浏览器兼容性强,但是存在的问题也是显而易见的:
1、file控件的定制性不强,在有的浏览器里边比较粗糙,不利于更好地统一用户界面;
2、上传时对文件大小的控制需要在服务器端做出判断。也就是说,只有将文件上传到服务器了,才能知道文件是不是超过了制定的大小。对于服务器宝贵的带宽是一种浪费,同时,大的文件上传时间较长,用户需要等待比较多的时间才能得到一个不能继续上传的提示。

用flash上传文件则相反,具有file控制不可比拟的优势:
1、定制性很强,可以做出很多变化多端的效果来。上传过程还可以做出非常细致的百分比效果出来。
2、能在将文件上传到服务器之前对文件大小做出判断,直接反馈给用户。不但响应时间很快,而且也节省了服务器带宽资源。

不过,flash的劣势也非常明显——浏览器兼容性较差,主要体现在3个方面:
1、需要安装有flash插件的浏览器才能使用,而且有flash版本本身的兼容性问题。比如,有的用AS3写的代码再flash 8播放器上就不能执行。
不过,flash拥有广泛的使用人群,升级制度也比较严格,大部分的用户都会升级到最新的版本。

2、有的浏览器在使用flash之前需要点击一次才能激活使用。这个可以通过js写flash代码来绕过激活机制。不过这招貌似在最新的opera里边行不通了。但是,我们也要看到,opera的使用范围毕竟是少数。

3、存在cookie处理方面的bug。这也正是这篇文章要讨论的主题。

cookie处理的bug主要体现在,通过非ie浏览器上传图片时,flash会将ie下的cookie发送到服务器端,从而引起cookie处理混乱。当上传的文件依赖于cookie信息时,就会出现错误的情况。比如,如果要求上传文件的用户必须已经登录,那么,如果ie下没有登录,当前这个非ie浏览器就不能上传文件,岂不是很郁闷。

这种情况的处理其实也就是抓住一点,在上传文件时,通过url将cookie信息传递到服务器端。

一种办法是flash和js取得通信,js将document.cookie信息传递给flash,flash再将信息在url的参数中传递给服务器端。

还有一种办法就是,通过flash控件的flashvars字段给flash传变量。这种办法能保证在客户端js未开启的情况下也能传递cookie信息给flash,还是比较保险的。不过,需要注意的是,cookie字符串中的空格的编码可能会导致最后解析出错。php通过urlencode编码空格时,会转化为%2B,而通过flash解析后,%2B会被解析为+,而不是空格。这有可能导致最后对用户信息的验证失败。

这种情况下的一个技巧就是,使用两次urlencode对cookie信息进行编码,最后flash传递到服务器端时,就能准确地读出原来的值了。


类别:技术追峰 | 添加到搜藏 | 浏览() | 评论 (1)
 
最近读者:
 
网友评论:
1
2009-10-23 10:43 | 回复
强人呀,NB
 
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
验证码: 请点击后输入四位验证码,字母不区分大小写
      

     

©2009 Baidu