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



我正在开发一个简单的基于角色的PHP应用程序,其中实现了Data Table。场景如下:用户将使用会话和cookie登录系统。他的角色将使用相同的会话和cookie来标识,这些cookie匹配用户凭据并根据角色获取表记录。我面临的问题是,无论何时发出POST请求,经过一段时间的不活动后,我都会出现错误-数据表警告表id=-为第0行第0列请求未知参数"0">

它在当地运行良好。我认为增加会话超时可能会有所帮助,但不幸的是没有。尽管每个会话都是在代码、php.ini和CPanel的php Selector中手动设置的,但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";
} 
}
?>

然后,在同一个类中,我也实现了服务器端DataTable,它通过下面的另一个类从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);

所有提取记录工作正常。但是,正如所提到的,由于用户不活动,出现了错误,并且表变为空。如果我重新加载页面,它会将我带到login.php。

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

最新更新