代码之家  ›  专栏  ›  技术社区  ›  three3

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

  •  2
  • three3  · 技术社区  · 15 年前

    我正在开发一个我的网站,允许用户参加测试,这样他们就可以看到他们对某个特定主题了解多少。不过,我遇到了一个小问题。一旦用户提交了评分测试,如何防止他们返回测试页面?我在运行Safari的Mac上,当我在提交测试后单击web浏览器中的后退按钮时,它会将我回答的所有答案都填好。我希望它这样做:当一个用户提交一个测试,他们在他们的web浏览器中单击back按钮,它会将他们重定向到主测试页。

    我正在使用PHP和MYSQL。我甚至设置了测试页面,这样用户就必须来自某个特定的url(我使用的是HTTP\u REFERER),我还尝试过其他东西,比如sessions,但我似乎无法解决这个问题。非常感谢您的帮助。

    8 回复  |  直到 15 年前
        1
  •  3
  •   Mark Byers    15 年前

    你不能阻止他们。

        2
  •  1
  •   Victor Nicollet    15 年前

    如果你不想别人 张贴不同答案 总是 可以通过直接向脚本发送适当的请求来绕过您的保护。

    如果你不想别人 请参阅前面的答案 (例如,如果有两个人在同一台计算机上为他们的测试打分),可以考虑在测试页面上使用AJAX提交答案,然后从字段中删除答案。这样,大多数浏览器都不会记住答案,后退按钮也不会取消删除被JavaScript删除的数据。

        3
  •  1
  •   Joseph    15 年前

    在年级页面的顶部,放置以下内容:

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

    session_start()
    if ($_SESSION['testcomplete'] == 'yes') {
        header("Location:cheater.php");
    }
    
        4
  •  1
  •   Fosco    15 年前

    您可以模拟没有可返回的页面。从一个页面开始,使用jQuery生成每个测试页面,并且不提供返回的方法,只提供前进的方法。后退按钮会在他们启动测试之前将他们带到页面,您可以允许他们再次启动测试并在应该的位置生成正确的部分。这将是相当容易的,如果你没有走太远的发展目前的方式。

        5
  •  0
  •   spig    15 年前

        7
  •  0
  •   fmalina    15 年前

    在发布答案的脚本顶部,检查数据库中是否有此测试的当前用户的测试结果。如果是,请重定向到结果。

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

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

        8
  •  0
  •   S..K    14 年前

    我所做的是

    • 我提供了一个session变量,如果用户将上一页的URL粘贴到地址栏中,那么在加载该页时,该页将自动转发到下一个所需的页。提到其URL的页面是第一次被访问还是被重新访问由session变量的值决定

    • 如果用户没有加载页面,而是通过浏览器按钮返回,则会自动重定向到历史记录中的下一页,如下所示:

    javascript:window.history.forward(1);

    希望这有帮助:)