Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 导航历史记录中未记录脚本访问,会话信息未正确存储_Javascript_Php_Session - Fatal编程技术网

Javascript 导航历史记录中未记录脚本访问,会话信息未正确存储

Javascript 导航历史记录中未记录脚本访问,会话信息未正确存储,javascript,php,session,Javascript,Php,Session,我正在为MySql数据库开发一个定制CRUD。 (请原谅我的英语) 注意:未正确复制的已编辑脚本(其中一个是第一个脚本的副本) 我试图阻止在插入、更新和删除脚本时使用退格导航,因为这些脚本会生成不一致的DB条目 CRUD生成list、insert、view、update和delete脚本,另外还生成insert_DB、update_DB和delete_DB脚本,这些脚本带有适当的DB函数,或者会提醒用户对脚本的ilegal调用,并将其重定向到主页 为了防止重复执行这些页面,Insert、upda

我正在为MySql数据库开发一个定制CRUD。 (请原谅我的英语)

注意:未正确复制的已编辑脚本(其中一个是第一个脚本的副本)

我试图阻止在插入、更新和删除脚本时使用退格导航,因为这些脚本会生成不一致的DB条目

CRUD生成list、insert、view、update和delete脚本,另外还生成insert_DB、update_DB和delete_DB脚本,这些脚本带有适当的DB函数,或者会提醒用户对脚本的ilegal调用,并将其重定向到主页

为了防止重复执行这些页面,Insert、update和delete pages会记录一个会话变量$\u session['Process'],其中包含要执行的下一个进程

DB脚本检查适当的$_SESSION['Process']值,并继续执行DB操作。如果成功,则将浏览器重定向到特定表的列表页

向前看,这很好。但是在用户被重定向到表列表脚本之后,如果用户点击“backspace”,则用户不会被重定向到DB脚本(该脚本会自动失败并提醒用户),但对调用的insert、view或update脚本,跳过DB脚本。DB脚本未记录在浏览器历史记录中。此外,初始列表脚本未显示正确的会话值

例如: (示例仅限于显示预期功能,不包括最佳实践,也不包括DB连接等。)

ListTest.php

<?php
session_start();
$_SESSION['DBName'] = "segucom_Responsive";
echo"Request DB Data collection form <br />";
echo "Session(Insert) as Received: ", print_r($_SESSION), "<br/>";
$_SESSION [ 'Process' ] = ""; 
session_write_close();
echo "Session(Insert) as Set: ", print_r($_SESSION), "<br/>";

?>

<form method="post" name="InsertCheck" action="ListFormTest.php" >
<p><input type="hidden" name="ListRequest" value="1" ></p>
<input type="submit" value="submit" />
</form>

ListFormTest.php

<?php
session_start();

echo"Collect data and sent to DB Insert script <br />";

echo "Session(Insert) as Received: ", print_r($_SESSION), "<br/>";
$_SESSION [ 'Process' ] = "Insert"; 
session_write_close();
echo "Session(Insert) as Set: ", print_r($_SESSION), "<br/>";
?>

<form  action="ListDBTest.php" method="post" name="InsertCheck" >
<p>Input Some data <input type="text" name="Data" ></p>
<input type="submit" value="submit" />
</form>

输入一些数据

ListDBTest.php

<?php
session_start();
echo"Receive data and insert in to DB, Chek for Scorrect Session Process value <br />";
echo "Session(Insert) as Received: ", print_r($_SESSION), "<br/>";

if ($_SESSION[ 'Process' ] != "Insert") {
    $_SESSION [ 'Process' ] = "Ilegal"; 
    session_write_close();
echo "Session(Insert) as Set: ", print_r($_SESSION), "<br/>";
echo '<script type="text/javascript">  alert  ("ILEGAL FORM ACCESS,");
window.location="ListTest.php";</script>';
}
 $_SESSION [ 'Process' ] = "Legal"; 

echo "Session(Insert) as Set", print_r($_SESSION), "<br/>";
include "../../cgh/tcl.txt";
 $conn = connect();
$sql = "INSERT  INTO Test (`Data`) VALUES  ('" . $_POST[ 'Data' ] . "');";
$res = $conn->query($sql) or die("Could not write Record, $sql " .  print_r($conn->errorInfo()));
if ($res != FALSE ) {
$_SESSION[ 'Process' ] = "Processed";
/*sleep(10);*/
session_write_close();
echo "Session(Insert) as Set: ", print_r($_SESSION), "<br/>";
echo '<script type="text/javascript">   alert ("Record Inserted");
window.location= "ListTest.php";  </script>';
} else {
 $_SESSION [ 'Process' ] = "DB_Error"; 
/*sleep(10);*/
session_write_close();
echo "Session(Insert) as Set: ", print_r($_SESSION), "<br/>";
echo '<script type="text/javascript">   alert ("Record Not Inserted"); 
window.location= "ListTest.php"; 
</script>';
die();
}

我该怎么做才能让这些脚本按预期工作

我搜索了StackOverflow并在Google上搜索了这个问题,但没有得到任何有用的建议,有些建议导致使用计时器和延迟,但提到了AJAX或上传延迟

我尝试了一些方法来保证会话写入和HTML刷新,但都无济于事,比如:

session_write_close();
sleep(10);
<meta HTTP-EQUIV="Pragma" CONTENT="no-cache"> 
<body onLoad="document.location.reload();"> 
session_write_close();
睡眠(10);

提前感谢

一系列事实使得代码无法运行

+)我希望在浏览器历史记录中记录ListDBTest.php,其中ListDBTest.php基本上是一个服务器端脚本,因此没有发送到浏览器的标题,只是一个警报,因此浏览器没有“访问页面”

+)导航回页面时,会根据运行的浏览器产生不同的结果,并且很难在所有浏览器上100%清除页面

我的问题的正确答案是实现一个PGR(Post-Get-Redirect)模式。 这一点乍一看并不容易理解,但下面是一些例子:
而且会让你半途而废

在这里,重要的是要注意,尽管PGR模式解决了大多数复制记录问题,但如第一篇文章所述,在请求中包含“nonce”字段仍然是非常好的做法


在服务器响应或internet响应较慢的情况下,您可能希望在发送“Post”后禁用“提交”按钮,这样用户就不能在第一时间发送两次表单。看看这个:

您可以在查询时检查post数据。例如,if(isset($\u POST)){执行sql查询。}非常感谢Kevin,我可能会采用您推荐的方法,但我真的很想知道我在这种方法上做错了什么。不久前我也遇到过类似的问题,我忘记了解决方案是什么。