没有在SWF的POST请求中发送Cookie值


Cookie values not being sent in POST request from SWF

我有一个SWF文件,允许用户在我的网站上上传文件。该SWF向我的服务器上的upload.php发送POST请求,从而上传文件。

但在此之前,在upload。php我要确保做这个的人是signed in。目前,我检查请求头中发送的SID cookie value,并检查数据库中针对该SID值的条目(我在数据库中存储会话)。我很好地为chrome工作,但在firefox失败,因为它不发送任何cookie头时,请求由SWF生成。

我该怎么做呢?谢谢你的帮助。

Chrome发送的标头

Content-Length: 355894
Origin: http://localhost 
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52
Content-Type: multipart/form-data; boundary=----------ei4Ij5ae0ae0ei4Ef1Ef1KM7GI3Ef1 
Accept: */* 
Referer: http://localhost/home Accept-Encoding: gzip,deflate,sdch Accept-Language: en-US,en;q=0.8 
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3 
Cookie: PHPSSID = 238e320eewbjdbew923e092ejhwbjhwebd

FireFox发送的报头

Accept: text/* 
Content-Type: multipart/form-data; boundary=----------GI3Ef1Ef1ae0GI3cH2Ef1Ef1cH2KM7 
User-Agent: Shockwave Flash 
Host: localhost 
Content-Length: 355894 
Connection: Keep-Alive 
Cache-Control: no-cache

这是Chrome的特性,而不是FireFox的Bug。上传SWF必须显式地发送浏览器cookie。看看从3.0版本开始的FancyUpload。

还需要注意的是,如果User-Agent header不等于浏览器,使用suhosin的PHP可以删除会话变量。这叫做"会话固定"。所以上传SWF必须在请求期间也发送浏览器User-Agent(或者只是禁用suhosin补丁)。