Php 在ajax请求后重新生成csrf令牌

Php 在ajax请求后重新生成csrf令牌,php,jquery,csrf,Php,Jquery,Csrf,如何在ajax请求后重新生成令牌的输入,这样我就不需要重新加载页面, 下面是我生成令牌的php代码 <?php class Token { public static function generate() { return $_SESSION['token'] = base64_encode(openssl_random_pseudo_bytes(32)); } public static function check($token){ if(isset($_SE

如何在ajax请求后重新生成令牌的输入,这样我就不需要重新加载页面, 下面是我生成令牌的php代码

<?php 
class Token {   
public static function generate() {
    return $_SESSION['token'] = base64_encode(openssl_random_pseudo_bytes(32));
}
public static function check($token){
    if(isset($_SESSION['token']) && $token === $_SESSION['token']){ 
        unset($_SESSION['token']);                  
        return true;        
    }
    return false;
  }
}
?>
这是我的表格

<form action="" method="post">          
        <div class="kiri">
            <div class="inp">   
                <input type="text" name="nama_karyawan" placeholder="Nama Karyawan" class="form-control nama_karyawan">
            </div>
            <div class="inp">                   
                <textarea class="form-control" name="alamat_karyawan" rows="5" placeholder="Alamat Karyawan"></textarea>
            </div>
        </div>
        <div class="kanan">
            <div class="inp">   
                <input type="password" name="password" placeholder="Password" class="form-control">
            </div>
            <div class="inp">   
                <input type="text" name="telepon_karyawan" class="form-control" placeholder="Telepon Karyawan">
            </div>
            <div class="inp">   
                <input name="akses" class="form-control" value="Admin" readonly>
                <div class="error-msg err05"></div>
            </div>                              
            <div class="inp">
                <input type="submit" name="insert" value="Simpan" class="btn btn-success col-sm-12">
                <input type="hidden" name="token" value="<?=Token::generate();?>">
            </div>
        </div>              
    </form>


由于您未设置令牌,下一次验证将失败。您必须在
检查后重新生成一个新的标记,并更新您的HTML标记字段

首先,在JS
insert()
中添加
“json”
数据类型

然后,在success函数中,更新字段

function insert(){
$('form').submit(function(e){
    e.preventDefault();
    var form = $(this);     
    $.ajax({
        type: form.attr('method'),
        url: 'process/karyawan/insert.php',
        data: form.serialize(),
        dataType: "json", // NEW
        success: function(result){
               $("input[name=token]").val(result.token); // NEW              
                load();
            }

        }
    });
});
}
在update.php中:

session_start();
// check and to stuff...
// then
$new_token = Token::generate(); // generate a new token

echo json_encode(['token' => $new_token]); // send to JS
die;

在您的
insert.php
中,在调用
Token::check()
之后,您能否再次
Token::generate()
并将其发送给Javascript更改
字段?你的Javascript
load()
是什么?我的Javascript load()是这样:$('#load data').load('process/karyawan/load.php');php正在加载内容。我是否可以在../load.php中使用令牌::generate(),以便令牌始终自动重新生成?是的,确实如此。但是,如果您希望表单在下次工作,而不重新加载页面,您必须将新令牌发送到Javascript,并更新令牌字段。请您告诉我怎么做,老实说,我不知道如何将新令牌发送到我的Javascript。请在您的问题中发布您的
update.php
function insert(){
$('form').submit(function(e){
    e.preventDefault();
    var form = $(this);     
    $.ajax({
        type: form.attr('method'),
        url: 'process/karyawan/insert.php',
        data: form.serialize(),
        dataType: "json", // NEW
        success: function(result){
               $("input[name=token]").val(result.token); // NEW              
                load();
            }

        }
    });
});
}
session_start();
// check and to stuff...
// then
$new_token = Token::generate(); // generate a new token

echo json_encode(['token' => $new_token]); // send to JS
die;