2009-12-14 123 views
0

我正在使用swf-upload處理我正在處理的網站上的文件上傳。PHP會話和Javascript回調

問題是捕獲函數,稱爲swf-upload.php。如果我直接訪問它的URL,它可以正常工作,它正確讀取會啓動會話並獲得用戶權限,但是當網頁使用ajax回調調用它時,它會聲明會話是空的。

我正在使用錯誤處理程序和輸出日誌記錄的組合來找出它在做什麼,在直接訪問和ajax訪問之間的代碼路徑中完全沒有區別。

任何想法是什麼?

+0

你可以發佈ajax回調代碼嗎? – 2009-12-14 15:36:24

+0

唯一真實的代碼是: \t session_start(); \t print_r($ _SESSION); – Meep3D 2009-12-14 15:46:43

回答

3

這在SWFUpload的一個已知的問題,你需要通過你的會話ID在給SWFUpload的構造函數,然後重新明確使用你的會話ID在你的遠程文件重新啓動此會話閱讀像這樣通過:

// in your javascript file 
swfu = new SWFUpload({ 
    upload_url: "http://<?=$_SERVER['HTTP_HOST']?>/scripts/swfupload2/upload.php", 
    post_params: {"PHPSESSID": "<?=session_id()?>"} 
} 

// in your PHP file 
if (isset($_POST["PHPSESSID"])) { 
    session_id($_POST["PHPSESSID"]); 
} 
1

也許你可以在你的ajax url中通過PHPSESSID顯式傳遞session id?您可以使用SESSION_ID()函數http://pl2.php.net/manual/en/function.session-id.php

+1

這是一個可能的安全風險。我不會建議這個 – 2009-12-14 15:49:11

+0

我不認爲在這個特定情況下這是嚴重的安全風險。特別是如果您重新生成會話ID並且不接受以前未知的會話ID-s。無論如何,您應該在應用該解決方案之前閱讀有關保護自己免受會話劫持的信息。 – 2009-12-14 22:35:00