数据表 - 用户不活动后请求的未知参数

Datatable - Requested Unknown Parameter after User Inactivity

我正在开发一个简单的基于角色的 PHP 应用程序,其中实现了数据 Table。场景如下 用户将使用会话和 cookie 登录系统。他的角色将使用与用户凭据匹配的相同会话和 cookie 来标识,并根据角色获取 table 记录。我面临的问题是,每当发出 POST 请求时一段时间不活动后,我就会遇到错误 - datatables warning table id= - requested unknown第 0 行第 0 列的参数“0”tn/4

它在本地工作正常。我认为增加会话超时可能会有所帮助,但不幸的是没有。尽管每个会话都是在代码 php.ini 和 CPanel 的 PHP 选择器中手动设置的,但它会在 30 分钟后注销。我将在下面分享代码块。

正在登录

if(mysqli_num_rows($Query)==1)
{
    if(!empty($_POST["rememberme"]))
    {
        setcookie ("username", $_POST["username"], (time() + 31536000));
        setcookie ("password", $_POST["password"], (time() + 31536000));
    }
    else
    {
        if(isset($_COOKIE["username"]))
        {
            setcookie ("username", "");
        }
        if(isset($_COOKIE["password"]))
        {
            setcookie ("password", "");
        }
    }
    if (!session_id()) session_start();
    $_SESSION['adminsuccess'] = $username;
    $_SESSION['user'] = $username;
    
    //Session Management
    $_SESSION['expire'] = time();

    header('Location: admin_interface.php');
    die();
}

然后他一登录就会被重定向到 admin_interface.php。会话管理就是这样处理的。

<?php
ini_set('session.gc_maxlifetime', 31536000);
//Session Management
if (!isset($_SESSION['adminsuccess']))
{
    header("Location:login.php");
}
else
{
    if((time()-$_SESSION['expire']) > 31536000)
    {
        session_destroy();
    }
    else{
        echo "admin user logged in";
    } 
}
?>

然后在同一个 class 中,我也在实施服务器端数据 Table,它通过另一个 class 从 JSON 获取数据,如下所示。

var table = $('#example').DataTable( {
    "processing":   true,
    "serverSide":   true,
    "order": [[ 1, "asc" ]],
    "paging"    :   true,
    "searching" :   true,
    "sDom": 'Brtip',
    "defaultContent": "-",
    "targets": "_all",
    "iDisplayLength"    :   100,
    "ajax": {
        url  :"fetchdatarecord.php",
        type : "POST",
    },
    "autoWidth": false,
    "aoColumnDefs": [{ "bSortable": false, "bSearchable": false, "aTargets": [1,2,3,4 ]},],
    "aoColumns": [{ "sWidth": "5%" }, { "sWidth": "5%" },{ "sWidth": "2%" }, { "sWidth": "3%" },{ "sWidth": "2%" }]
} );

最后在 fetchdatarecord 上,我使用列获取数据,并使用 JSON

进行设置
if($role == "admin"){
    $subdata[]=$row[0];
    $subdata[]=$row[1];
    $subdata[]=$row[2];
    $subdata[]=$row[3];
    $subdata[]=$row[4];
}

然后最后-

$json_data=array(
    "draw"              =>  intval($request['draw']),
    "recordsTotal"      =>  intval($totalData),
    "recordsFiltered"   =>  intval($totalFilter),
    "data"              =>  $data
);
echo json_encode($json_data);

所有获取记录都工作正常。除了,如前所述,由于用户不活动,错误抛出并且 tables 变空了。如果我重新加载页面,它会将我带到 login.php.

答案似乎很简单,就是将 .htaccess 上的会话保存路径更改为“/tmp”。这就是帮助我的原因。这与 DataTable 插件无关,因为它会在会话超时时停止连接。