数据表 - 用户不活动后请求的未知参数
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 插件无关,因为它会在会话超时时停止连接。
我正在开发一个简单的基于角色的 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 插件无关,因为它会在会话超时时停止连接。