所以我发现这个tutorial创建了一个唯一的ID来防止重复的表单提交,这是我正在使用的脚本:
// start session
session_start();
// set page instance id
if (!isset($_SESSION['page_instance_ids'])) {
$_SESSION['page_instance_ids'] = array();
}
$_SESSION['page_instance_ids'][] = uniqid('', true);
// form processing logic
$page_id_index = array_search($_POST['page_instance_id'], $_SESSION['page_instance_ids']);
if ($page_id_index !== false) {
unset($_SESSION['page_instance_ids'][$page_id_index]);
// do form processing
}
如果我在另一个标签页面中打开表单,结果是:
["page_instance_ids"]=>
array(2) {
[0]=>
string(23) "52cada0446c6a1.79120890"
[1]=>
string(23) "52cada0bb62bc0.91394639"
}
最后建议:
考虑在会话数组中保存每个page_instance_id的时间戳,或者将会话数组限制为最新的n值,以便清除从未用于提交表单的任何旧页面实例ID。
我有这段代码在X时间之后取消所有会话:
if (isset($_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY'] > 1800)) {
// last request was more than 30 minutes ago
session_unset(); // unset $_SESSION variable for the run-time
}
$_SESSION['LAST_ACTIVITY'] = time(); // update last activity time stamp
我想知道UNSET是否有任何方法可以独立创建的数组中的每个字符串......就像建议的那样。