0

我的网站标题中有消息块。当用户单击“关闭消息”时,该消息应该消失并且在当前用户会话期间看不到。所以我决定使用 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 函数中打印请求数据时,它会显示“隐藏”。请给我解释一下,我在哪里做错了。

PS 在本地服务器上测试(最新的 WAMP)

4

2 回答 2

2

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

于 2013-10-14T16:40:28.597 回答
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,

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

于 2015-02-20T21:58:35.577 回答