2013-01-21 43 views
1

我有一個SWF文件,允許用戶在我的網站上上傳文件。該SWF向我的服務器上的upload.php發送POST請求,從而上傳文件。從SWF的POST請求中未發送Cookie值

但在此之前,在upload.php我想確保這樣做的人是signed in。目前,我檢查在請求標頭中發送的SID cookie value,並在我的數據庫中檢查對應SID值的條目(我在數據庫中存儲會話)。我對chrome工作良好,但在firefox中失敗,因爲它在SWF生成請求時不發送任何cookie標頭。

我應該如何去做。感謝幫助。

在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 

回答

0

發送的標頭這是Chrome瀏覽器的功能,但不使用Firefox的一個Bug。上傳SWF必須明確地發送瀏覽器Cookie。看看從3.0版開始的FancyUpload。

另請注意,如果User-Agent頭不等於瀏覽器,帶suhosin的PHP可以刪除會話變量。這被稱爲「會話固定」。因此,上傳SWF必須在請求期間發送瀏覽器用戶代理(或者只是禁用suhosin補丁)。