如何阻止某人回到上一页?

时间:2010-08-11 16:10:04

标签: php mysql session

我正在我的网站上工作,允许用户进行测试,以便他们可以看到他们对特定主题的了解程度。我遇到了一个小问题。用户提交评分测试后,如何阻止他们返回测试页面?我在运行Safari的Mac上运行,当我在提交测试后单击我的Web浏览器中的后退按钮时,它会留下我回答的所有答案。我希望它这样做:当用户提交测试并且他们在Web浏览器中单击后退按钮时,它会将它们重定向到主测试页。

我正在使用PHP和MYSQL。我甚至设置了测试页面,以便用户必须来自某个URL(我正在使用HTTP_REFERER)并且我尝试了其他的东西,例如会话,但我似乎无法弄清楚这一点。非常感谢任何帮助。

8 个答案:

答案 0 :(得分:3)

你不要阻止他们。

而是更改您的应用程序,以便即使它们返回它仍然有效。您可以在页面的隐藏字段中嵌入唯一编号,如果他们重新提交相同的测试两次,您可以检测到它并显示相应的错误消息。您还应该考虑如果修改唯一编号会发生什么。

答案 1 :(得分:1)

如果您不希望人们在已经回答后发布不同的答案,您只需在接受评分测试的脚本中检查用户从未之前提交了测试。如果不这样做,聪明的学生将总是能够通过直接向该脚本发送适当的请求来规避您的保护。

如果您不希望人们查看以前的答案(例如,如果您有两个人在同一台计算机上对他们的测试进行评分),请考虑在测试页面上使用AJAX提交答案然后从字段中删除它们。这样,大多数浏览器都不会记住答案,后退按钮也不会删除被JavaScript删除的数据。

答案 2 :(得分:1)

在成绩页面的顶部,输入以下内容:

session_start();
$_SESSION['testcomplete'] = 'yes';

然后在测试的每一页的顶部,把它放在:

session_start()
if ($_SESSION['testcomplete'] == 'yes') {
    header("Location:cheater.php");
}

答案 3 :(得分:1)

您可以模拟没有要返回的页面。从一个页面,使用jQuery生成每个测试页面,并且无法返回,只能转发。后退按钮会在他们启动测试之前将它们带到页面,您可以允许它们再次启动测试并生成正确的部分。如果您在开发过程中没有走得太远,那将非常容易。

答案 4 :(得分:0)

你可以运行清除所有答案的javascript。您可能也只允许一次提交,以便后续提交不会得到处理。 HTTP_REFERER通常是发送的,但可以通过更改的浏览器进行欺骗和伪造。

答案 5 :(得分:0)

答案 6 :(得分:0)

在脚本的顶部发布答案,检查您是否在数据库中为此测试的当前用户提供了测试结果。如果您这样做,请重定向到结果。

if(get_test_results($user)){
   $test_url = get_test_url($user);
   header( "Location: $test_url" ) ;
}

禁用后退按钮不是一个好主意。

答案 7 :(得分:0)

我自己面临类似的问题进行在线检查

我做的是

  • 我提供了一个会话变量,以便用户在地址栏中粘贴上一页的URL,然后在加载页面时,页面会自动转发到下一个所需页面。是否提到URL的页面是第一次访问或重新访问的页面是由会话变量的值决定的

  • 如果用户不是通过浏览器按钮返回页面,而是自动重定向到历史记录中的下一页:

         的javascript:window.history.forward(1);       

希望这会有所帮助:)