2012-06-10 37 views
1

我在使用AJAX請求時出現$_SESSION超全球問題。

session_start()函數在任何會話編碼之前被調用。會話ID在調用代碼和AJAX響應代碼中也是相同的(在兩個腳本中通過回顯session_id()進行測試)。 AJAX PHP文件位於同一個域中。一切都應按照標準定義的方式工作,但是當我在被調用的AJAX腳本文件中執行print_r($_SESSION)時,我會得到Arrray()輸出。

我撞到磚牆......我不知道這是爲什麼不工作...

在Chrome和Firefox都選中。

任何想法?

UPDATE:

問題是與$.ajax(...)要求!當我做AJAX請求時,它知道正確的會話ID,並且session_start()函數返回TRUE(成功繼續會話),但它會重置我的$_SESSSION超全局!它會清空出來...我不知道爲什麼還...

代碼:

的index.php:

<?php 

session_start(); 

$_SESSION['Test']='O.K.'; 

echo("SESSION_ID: " . session_id()); 
echo("SESSION_SIZE:" . sizeof($_SESSION)); 

?> 

... Standard HTML stuff and jQuery include ... 

<script> 
    $.ajax(
    { 
     type: "POST", 
     url: "AJAXTest.php", 
     data: null, 
     success: function(sData) { alert(sData); } 
    }); 

</script> 

AJAXTest.php:

<?php 

session_start(); 

echo("SESSION_ID: " . session_id()); 
echo("SESSION_SIZE:" . sizeof($_SESSION)); 

?> 

指數.PHP輸出:

SESSION_ID: xxxxxxxxxxxxxxxxxxxxxxx 
SESSION_SIZE: 1 

報警輸出:

SESSION_ID: xxxxxxxxxxxxxxxxxxxxxxx (right session id) 
SESSION_SIZE: 0 

而AJAX調用後$ _SESSION是空的。跨所有其他腳本與同一屆...我很困惑...

+0

在'session_start()'前有沒有任何代碼? –

+0

你的瀏覽器中啓用了cookies嗎? – somnath

+0

用var_dump()檢查它 – sohaan

回答

1

這可能是因爲如果你沒有把任何價值$_SESSION。它會告訴你做print_r($_SESSION)

嘗試建立一個價值$_SESSION['user']='frankie'

陣列(),然後做print_r($_SESSION);
SESSION_ID()在$ _SESSION數組從未顯示。

+0

如果你的問題解決了,請將其標記爲已接受的答案。 thanx和問候 –

+0

我不是新手Chaitanya :) Ofcourse我用字符串測試過它:) $ _SESSION [「test」] =「test」;是我的測試會話變量。 – StjepanV

1

這可能不是AJAX的問題,而是會話本身。現在,您只是測試$ _SESSION數組和會話標識,而不是會話存儲本身。嘗試查看會話狀態是否在幾個非AJAX請求中保持不變。相反

$_SESSION['Test' . time()]='O.K.'; 

這個:例如,使用此

$_SESSION['Test']='O.K.'; 

當刷新頁面,你SESSION_SIZE數量應該增加。如果不增加,php.ini中的會話存儲參數可能不正確?例如,將會話寫入文件或使用memcache存在問題(如果將會話用於會話)時出現問題。

另外請確保頁面和ajax調用之間沒有其他請求 - 也許一些調用腳本重置您的$ _SESSION數組?

+0

我已經創建了完全獨立的代碼來測試PHP設置,並且使用此代碼,所有工作都很好......所以,錯誤必須與我的代碼一致。問題是我的代碼很複雜,很難調試。感謝大家的意見。我會在找到它時發佈解決方案。 – StjepanV

0

問題出在我的自定義php.ini文件中......它顯然搞砸了一些會話的重要設置(即使它們沒有定義 - >更改)。

結果是,每次調用session_start()都會重置$ _SESSION超全局並清空它,但保留相同的會話ID使我困惑並投向錯誤的方向。直到我徹底解決了這個問題之前,很明顯,錯誤並不在我的代碼中。

謝謝大家誰感興趣。