防止jquery调用post收集用户客户端的一些数据后表单令牌丢失


Prevent lose of form token after jquery calls post to gather some data about user client

这是我正在使用的非常简化的示例。每次用户访问页面时,jQuery脚本调用post回调来收集一些数据。在这样做的同时,我正在改变webToken的内容…

我的问题是如何保留令牌,即使在post-back之后?我知道这可能是由于重新呈现整个页面造成的。但是我已经尝试完全消除渲染表单,我仍然不能解决这个问题。

我想知道我在这里还会遇到什么问题。

我希望这段代码能更好地解释我的问题。

<head>
    <script>
        $().ready(function() {
            var file = location.pathname.substring(1, location.pathname.length);
            var data = 
            {
                platform:navigator.platform
            };
            $.post(file,
            {
                javascript: data
            });
        });
    </script>
</head>
<body>
    <?php
        // doing things with $_POST['javascript']...
        if($_SERVER['REQUEST_METHOD'] === 'POST') {
            if($_POST['webToken'] != $_SESSION['webToken']) {
                echo "The token did not match!";
            }
            else {
                // do something
            }
        }
        else {
            $token = md5(uniqid());
            $_SESSION['webToken'] = $token;
            echo '<form method="post" action="SELF!!!">
            <input type="text" name="title" value="' . $title . '">
            <input type="hidden" name="webToken" value="' . $token . '">
            <input type="submit" value="Submit"></form>';
        }
    ?>
</body>

我看到你的$webToken只生成一次。

  • 还有其他地方可以生成它吗?
  • session是否已经启动(自动或手动启动)?

同样,在post (ajax)调用中,您可以:

  • 生成一个新的令牌
  • 在呼叫响应中返回
  • 设置调用完成与jQuery

$('input[name=webToken]').val(yourNewToken);