我目前正试图找出一种策略,即在测验期间不允许用户刷新/重新加载页面。我知道完全禁用浏览器中的重新加载功能并不是一个好主意,甚至是不可能的,但有没有其他方法可以让用户无法通过重新加载页面来重启检查?
我目前没有显示后退按钮的浏览器窗口,并且不允许输入网址。我知道我可以通过右键单击鼠标来禁用上下文菜单,但仍然允许用于重新加载页面的键盘快捷键。关于如何处理这个问题的任何想法?
修改
我应该改变这意味着我实际上并没有尝试禁用浏览器重新加载功能,而是如果用户确实尝试重新加载,我想重定向它们以便测试结束,或者发生其他一些事件而不是重新开始测试。
目前,我正在使用localStorage变量来指示它是否重新加载并从那里开始。这是最好的解决方案吗?
谢谢!
答案 0 :(得分:4)
如果您尝试仅使用客户端技术(javascript)来保护Web应用程序,那么您正在进行一场艰难的,无法取胜的战斗。总有办法绕过你正在尝试的措施。
一个可行的解决方案是在每个用户决定后跟踪测验进度服务器端。这样,如果用户尝试重新加载(或以其他方式重新开始,重新回答或跳过),您只需将它们返回到它们所属的位置即可。
答案 1 :(得分:0)
我可以想出一个可以检测页面是否刷新的解决方案。
如果您正在使用PHP,则可以在加载时设置SESSION变量,然后检查该变量是否已设置
<?php
if(!isset$_SESSION['loaded'])
{
$_SESSION['loaded'] = 1;
}
else
{
echo 'You refreshed, your quiz is over ;-) ';
}
?>
至于禁用刷新,你将接近恶意软件来实现它,即。从JavaScript中过滤“F5”键或“Ctrl + R”的所有键盘输入,并在输入这些快捷键时忽略键盘输入。我不确定这是否可行/道德