【问题标题】:Unable to change session variable through AJAX无法通过 AJAX 更改会话变量
【发布时间】:2015-02-21 05:58:35
【问题描述】:

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

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

【问题讨论】:

  • 你在文件顶部使用 session_start 吗?
  • 我在 header.php 文件中有它

标签: php jquery ajax session


【解决方案1】:

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

【讨论】:

  • 我在 header.php 中有 session_start() - 所以会话总是在 ajax 请求之前声明。
  • 将 session_start() 放在我访问或设置会话变量的每个文件中对我有帮助。
  • onlydimon:也许您已将其包含在包含进行 ajax 调用的脚本的文件中,但未包含在处理请求的服务器端脚本中。
【解决方案2】:

实际上您遇到的问题是 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,

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-23
    • 2016-03-20
    • 1970-01-01
    • 2012-12-14
    • 2012-10-03
    • 2017-07-11
    • 2016-07-04
    相关资源
    最近更新 更多