【问题标题】:Updating session variables with AJAX request使用 AJAX 请求更新会话变量
【发布时间】:2019-06-09 13:11:47
【问题描述】:

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

index.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>

reset.php

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

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

【问题讨论】:

  • 提交后是否刷新index.php?
  • 如果您在reset.php 中回显会话变量并在成功中创建console.log(response) 会怎样
  • 只有在页面第一次渲染时才会读取会话变量。 AJAX 请求根本不会影响它。如果您需要读取更新的值(这有点多余,因为您刚刚调用了设置显式值)将数据返回给 AJAX 请求。话虽如此,您似乎对客户端和服务器端逻辑之间的区别有点困惑。我建议在该领域进行一些研究。
  • 如果您在 reset.php print_r($_SESSION); 中添加 1 行并将 index.php 更改为 success: function(response){ console.log(response); } });,则您的代码运行良好
  • @devpro,不,页面必须在不刷新的情况下工作

标签: php jquery ajax session


【解决方案1】:

只有在页面首次呈现时才会读取会话变量。 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");
    ?>

【讨论】:

  • 不错的代码转储,您至少可以解释这里发生了什么以及与 OP 的代码有什么不同...
  • @Adam 解释够了吗?
  • 看起来不错!添加一些 cmets 和解释总是有帮助的,以便 OP 和遇到此问题的其他人可以理解不同的解决方案。干得好!
猜你喜欢
  • 2014-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-02
  • 2017-02-23
  • 2021-06-27
  • 1970-01-01
相关资源
最近更新 更多