2012-12-17 17 views
0

这是一个在线考试:我应该让用户使用浏览器的后退和前进按钮,以及在用户已经参加考试时刷新页面。 在此先感谢您的答案和回复。如何捕获后退和前进按钮并使用Javascript刷新?

+0

我不认为你可以,因为这是一个浏览器的事情不是代码的事(我知道)。但是,查看锁定浏览器,我必须对其进行测试,并且它完全锁定您的计算机,直到您退出 –

+0

到目前为止发现了什么? – JSuar

+0

你为什么不简单地使用'unload'事件? (''或http://api.jquery.com/unload/) – tftd

回答

3

我不认为解决方案应该依赖于客户端代码,因为它可以由客户端修改。我认为对于某些受控制的环境,您可以阻止客户端进入开发者模式,这可能会很好。

如果可以控制环境,限制键盘快捷键,右键单击并以全屏模式提供浏览器应该足以确保客户端正确完成任务。

否则,依赖于客户端和服务器之间的键/值令牌的系统应该完成这项工作。一些安全的在线服务依赖于这样的系统,如果您接受打破“后退”和“前进”功能以及刷新页面,则它运行良好。当客户端调用这样的功能时,您肯定可以模拟回调。

在某些情况下,仅在JavaScript上才有用,以确保页面显示。例如随机生成随机标识符和随机页面等。

在任何情况下(IMO),完全依靠JavaScript为安全目的不是(也不是)一个好主意。

编辑:

这里是一个证明的概念:

服务器生成uniqid和值使用HTML5本地存储功能的客户端存储。使用本地存储作为键/值注册表,我们可以存储页面阶段,并将每个重新加载与存储的密钥进行比较,并与服务器新生成的密钥进行比较。

它非常直接,用作服务器生成的令牌可以随机化很多,防止任何人猜测它。

足够长的服务器生成令牌甚至可以为客户端本地存储注册表提供一个很好的一次性加密密钥。

代码:

<?php 
    $stamp = uniqid(); 
?> 
<!DOCTYPE html> 
<html> 
<head> 
<script src="//cdnjs.cloudflare.com/ajax/libs/json2/20110223/json2.js"></script> 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> 
<script src="https://raw.github.com/andris9/jStorage/master/jstorage.js"></script> 
    <style> 
     body{background-color:blue;} 
     p{margin-left:auto;margin-right:auto;width:800px;background-color:gray;font-weight:bolder;padding:1em;} 
    </style> 
    <script> 
    // display nice messages 
    var err_reloaded_page = "page reloaded"; 

    var keeper = '<?php echo $stamp; ?>'; 
    var current = $.jStorage.get('state'); 
     // first initialization, Exception 
     if(current == null){ 
      $.jStorage.set('state',keeper); 
      current = $.jStorage.get('state'); 
     } 

     if(current != keeper){ 
      alert(err_reloaded_page); 
     } 
    </script> 
</head> 
<body> 
    <p> 
     Proof of concept<br/> 
     Can detect page reload by comparing a stamp created server-side, stored on the local storage and compared on each page reload. 
    </p> 
</body> 
</html> 
+0

许多浏览器都有一个'kiosk模式',类似于你的建议。 – icktoofay

+0

Aries

+0

我试过这个JavaScript代码,但它只会过期文档,当你再次单击再试一次,并重新发送页面将重复上一页。 – Aries