2013-10-14 47 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, 

这应该可以解决您的问题。