首页 > 解决方案 > 使用 AJAX 请求更新会话变量

问题描述

这是问题所在。我需要使用 AJAX 请求调用“reset.php”脚本并将会话变量重置为初始值。现在,它看起来像这样:

索引.php:

<?php session_start();
    $_SESSION['var'] = 0;
    $_SESSION['var'] = 1;
?>
<button>reset</button>
<script type="text/javascript">
    $("button").click(function() {
        $.ajax({
            type: "GET",
            url: "reset.php",
            success: function(){
                    //some function
                }
            });         
    });
</script>

重置.php

<?php session_start();
    $_SESSION['var'] = 0;
?>

这不起作用,“成功”运行正常,但会话变量保持不变。可能是什么问题?

标签: phpjqueryajaxsession

解决方案


会话变量仅在页面首次呈现时才被读取。AJAX 请求根本不会影响它。如果您需要读取更新的值(这有点多余,因为您刚刚调用了设置显式值)将数据返回给 AJAX 请求。话虽如此,您似乎对客户端和服务器端逻辑之间的区别有点困惑。我建议在这方面做一些研究。– 正如 Rory McCrossan 在评论中所说。

    <?php session_start();
        if(isset($_SESSION['var'])) {
              $_SESSION['var'] = 0;
        }else {
            $_SESSION['var'] = 1;
            }
        ?>
        <button>reset</button>
        <script type="text/javascript">
            $("button").click(function() {
                $.ajax({
                    type: "GET",
                    url: "reset.php",
                    success: function(res){
                            alert(res);
    if(res) { 
    location.reload();  // but AJAX means without reload                        
     //<?  $_SESSION['var']; ?> = res; will not work            
    // you cannot set PHP value here, you need to do it with javascript if you want to set the value anywhere on this page

}
                        }
                    });         
            });
        </script>

你的 php

<?php session_start();
    $_SESSION['var'] = 0;
    echo  $_SESSION['var'];
?>

你可以使用重定向

<?php session_start();
        $_SESSION['var'] = 0;
       header("url of the above page");
    ?>

推荐阅读