2013-10-14 89 views
0

我的網站標題中有消息塊。當用戶點擊「關閉味精」時,該消息應該消失並且在當前用戶會話期間看不到。 所以我決定使用jQuery的Ajax:無法通過AJAX更改會話變量

$('#lang-msg .close').on('click', function(event) { 
    event.preventDefault(); 
    $.ajax({ 
     url:"remlmsg.php", 
     type:"POST", 
     data:"id=2,myajaxquery=true ", 
     success:function(html){ 
      console.log(html); 
      $('#lang-msg').fadeOut(300,function() { 
       $(this).remove(); 
      }) 
     } 
    }) 
}) 

而且在remlmsg.php我只有代碼,它定義了新的會話變量:

$_SESSION['langmsg'] = 'hide'; 
    echo $_SESSION['langmsg']; 

在header.php文件我檢查$ _SESSION ['langmsg']未定義。

if (!isset($_SESSION['langmsg'])) {   
    if ($sLanguage == 'ru') { 
     echo '<script type="text/javascript"> 
       $(function() { 
        showLangMessage("en"); 
       }) 
      </script>'; 
    } 
} 

它說永遠是真的!但是當我在ajax函數中打印請求數據時,它顯示'隱藏'。 請向我解釋一下,我錯了。

P.S. 在本地服務器上測試(最新的WAMP)

+0

你是否在文件頂部使用session_start? –

+0

我在header.php文件中有 – onlydimon

回答

2

您需要首先聲明session_start()。否則,你只會編輯一個不存儲在任何地方的局部變量。

+0

我在header.php中有session_start() - 所以session始終在ajax請求之前聲明。 – onlydimon

+0

將session_start()放在每個訪問或設置會話變量的文件中幫助我。 – onlydimon

+0

onlydimon:也許你已經將它包含在具有正在進行ajax調用的腳本的文件中,但未包含在處理請求的服務器端腳本中。 – Pere

0

其實你遇到的問題是,ajax調用會有一個不同的會話ID,這與雙方發送/接收的頭有關。

嘗試產生一些JavaScript和PHP一樣:

var phpSessionId='<?=session_id()?>'; 

然後在remlmsg.php將其添加到頂部:

if(isset($_POST['session-id'])) session_id($_POST['session-id']); 
session_start(); 
在你的Ajax調用使用

最後:

data:"id=2,myajaxquery=true,session-id=" + phpSessionId, 

這應該可以解決您的問題。