无法通过AJAX更改会话变量

时间:2013-10-14 16:35:06

标签: php jquery ajax session

我的网站标题中有消息块。当用户单击“关闭消息”时,该消息应消失,并且在当前用户会话期间无法看到。 所以我决定使用jQuery 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)

2 个答案:

答案 0 :(得分:2)

您需要先声明session_start()。否则,您只会编辑一个未存储在任何地方的局部变量。

答案 1 :(得分:0)

实际上你遇到的问题是ajax调用会有不同的会话ID,这与双方发送/接收的标题有关。

尝试使用PHP生成一些javascript:

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,

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