解决使用FireFox+Flash上传文件时SESSION丢失的问题
不知道Firefox是出于安全考虑还是有Bug,使用Flash请求页面的时候Cookies和SESSION都不会传递,上网查一下,很多教程都说是把php.ini中的
session.use_trans_sid设置为1,但是我不明白这是什么意思,所以不敢轻易修改,免得带来安全问题,而且如果是虚拟主机用户要不是没办法修改了?
所以要想别的解决方法,从程序上解决问题,看到一位牛人的Blog(竟然禁止了IE访问他的Blog,不知道要损失多少访问量,嘎嘎),他的方法是在flash的URL后面加参数,把sid传递给flash,然后在flash里面把sid从flash里面传递给页面,但是他也没说清楚在页面里怎么处理传递过去的sid,因为我是用的jqUploader插件,所以没必要这么麻烦,况且我对flash也不熟悉,万一改坏了那不彻底完蛋了。
下面是我的解决方法
首先通过php的session_id()函数把sid从url参数传递过去,然后从$_GET数组获取sid,然后在接收页面使用session_id($sid)重新设置sid的值,具体代码如下
提交页面
<form action="url.php?sid=<?php echo session_id() ?>" method="POST"> ................... ................... </form>
接收页面
<?php session_id($_GET['sid']); session_start(); ?>
这样就能保证session正确通过flash传递了
要注意的是 设置sid的session_id($GET['sid']);语句一定要在session_start();之前,否则设置不能成功
注释:某些童鞋可能搞不明白session和sid到底什么关系,这里简单说一下,sid其实就是session id的简称,session的值是保存在服务器端的,客户端要通过自己的sid去服务器上取自己的session,sid一般保存在浏览器的cookies里面,如果客户端不支持cookies,sid也可以通过url传递,就像本文的例子
您可以RSS 2.0订阅。 留言,或者引用 Trackback。
確實如此,這也是最好的解決方法了.
//开启Session
$sessionid=Toget("sessionid");
IF(StrLen($sessionid)>0){Session_Id($sessionid);}
Session_start();
Echo "
Flash('_swf=img/up.swf?php=http://local/Sys_File.php','_flashvars=&work=doup&siz=2000&typ=jpg|gif|bmp&pth=../upload/&sessionid=".session_id()."','_quality=high','_loop=false','_width=350', '_height=30','_wmode=transparent');".Chr(10);