解决使用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

1条评论 »

 
  • seven 说:

    確實如此,這也是最好的解決方法了.

    //开启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);

 

发表评论

XHTML:您可使用下列标签:<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">