2012-01-16 67 views
0

我已在我的網站中實施了評論部分。按下提交按鈕後,通過ajax aproach進行以下過程。在AJAX調用期間PHP會話丟失/空任意

  1. 註釋被保存在數據庫中。
  2. 更新日誌評論(仍採用DB),它保存了註釋的細節記錄。 (出埃及記「李四曾這樣評價別人的帖子。」)
  3. 重新加載註釋部分。現在可以看到新的評論。
  4. 完成。

的問題出現在二號看到下面的僞代碼。

session_start(); 
//1. saves the comment in the database. 

//2. this gets the current user who submitted the comment 
// hence I used the $_SESSION variable 
$log .= "$_SESSION['firstname'] $_SESSION['lastname'] " 
       . 'has commented on someone\'s wishlist.'; 

updateLog($log); // commits the log in the database. 

有時候,結果雲:

李四曾這樣評價別人的心願。

其他時間$ _SESSION是空的,會導致到:

曾這樣評價別人的心願。

我不知道問題出在哪裏。但是,在Ajax調用中傳遞會話詳細信息是否是個好主意? 像這樣(僞):

$.ajax({ 
     url: 'includes/request.php', 
     type: "POST", 
     data: { 
       firstname : $_SESSION['firstname'], 
       lastname : $_SESSION['lastname'], 
       //more details here. 
     success: function(result) { 
      // update the inner html of comment section 
     } 
    }); 

我對解決上述疑慮,因爲它可能無法在市場上最好的做法,因爲$ _SESSION變量提供無處不在的PHP頁面。說起來,這種情況下的最佳做法是什麼呢?

最後我的域名通過網絡管理員(下圖)掩蔽comments.com

:coolnamebynetad.com

能掩蔽是罪魁禍首?我想不是因爲$ _SESSION變量有一些工作,並且因爲某些隨機原因,它不會。

回答

1

這是IE瀏覽器(也許其他一些瀏覽器)的問題 - 這是因爲IE的不通過AJAX發送cookie - 簡單的解決方法是手動與特定的ID發送給名爲PHPSESSID的cookie,然後啓動會話

+0

喜@ SergeS首先感謝,所以在AJAX中使用Sessions時,這可能是最好的方式/練習嗎? – JohnnyQ

+0

AFAIK是的,我正在使用它... – SergeS

+0

謝謝@SergeS我認爲這是不正確的方式,因爲我意識到我失去了其他用戶的會話跟蹤。我也認爲它受到了網址掩蓋的影響。 – JohnnyQ