- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 OES(在线考试系统)的新手。我想在用户无法作弊的安全环境下进行在线考试请帮忙做这件事。
我正在使用 PHP
和 Codeigniter
框架用于后端和 Bootstrap ,JS 和 JQuery 用于用户端或前端。
我已经创建了一个可以直接正常工作的考试模块。但我想限制用户做错事告诉我最好的方法或建议我可以获得详细信息的任何链接。
这是我的assessment.php
View 文件
<?php
$temp = "";
$sr_no = 0;
$assessment = $response['assessment'];
$test_time = $this->session->userdata('test_time') * 60;
$questions = $response['questions'];
$total_que = count($questions);
$i = $que_no - 1;
$question = $questions[$i];
$sr_no++;
$temp.="<div class='form-group'><input type='hidden' name='que_id' value='" . $question['que_id'] . "'>";
if ($total_que == $que_no) {
$i = $que_no - 1;
$temp.="<input type='hidden' name='que_no' value='$i'>";
} else {
$temp.="<input type='hidden' name='que_no' value='$que_no'>";
}
$temp.="<label class='col-md-2'>Que. $que_no)</label>
<label class='col-md-10'>" . $question['que_dscp'] . "</label>";
if ($question['que_type'] == "d") {
$temp.="<div class='col-lg-9 bottom'>";
if (isset($question['selected_options'])) {
$temp.="<textarea style='height: 100px;' disabled name='ans_" . $question['que_id'] . "[]' class='form-control'>" . $question['selected_options'][0] . "</textarea>";
} else {
$temp.="<textarea style='height: 100px;' name='ans_" . $question['que_id'] . "[]' class='form-control'></textarea>";
}
$temp.="</div>";
} else {
foreach ($question['options'] as $option) {
$temp.="<div class='col-lg-9 bottom'>
<div class='input-group'>
<div class='input-group-addon'>";
if ($question['que_type'] == "ma") {
if (isset($question['selected_options'])) {
if (in_array($option['option_id'], $question['selected_options'])) {
$temp.="<input type='checkbox' checked disabled >";
} else {
$temp.="<input type='checkbox' disabled >";
}
} else {
$temp.="<input type='checkbox' name='ans_" . $question['que_id'] . "[]' value='" . $option['option_id'] . "'>";
}
} else if ($question['que_type'] == "sa") {
if (isset($question['selected_options'])) {
if (in_array($option['option_id'], $question['selected_options'])) {
$temp.="<input type='radio' checked disabled >";
} else {
$temp.="<input type='radio' disabled >";
}
} else {
$temp.="<input type='radio' name='ans_" . $question['que_id'] . "[]' value='" . $option['option_id'] . "'>";
}
}
$temp.="</div>
<input type='text' readonly value='" . $option['option_dscp'] . "' class='form-control'>
</div>
</div>";
}
}
$temp.="</div>";
$temp1 = "";
$sr_no = 0;
foreach ($questions as $question1) {
$sr_no++;
$temp1.="<a href='" . base_url() . "user/assessment/index/" . $assessment['test_id'] . "/$sr_no' class='btn btn-info'>$sr_no</a> ";
}
?>
<script type="text/javascript" src="<?php echo base_url(); ?>resource/js/TimeCircles.js"></script>
<link href="<?php echo base_url(); ?>resource/css/TimeCircles.css" rel="stylesheet">
<div class="container">
<div class="page-header center">
<h1><?php echo $assessment['test_name']; ?> <small><?php echo $title; ?> </small></h1>
</div>
<?php $this->load->view('alert'); ?>
<div class="panel panel-default col-md-4" style="padding: 0;">
<!-- Default panel contents -->
<div class="panel-heading">Questions Navigation</div>
<div class="panel-body" >
<?php echo "$temp1"; ?>
</div>
<div id="test_time" data-timer="<?php echo "$test_time"; ?>"></div>
</div>
<div class="panel panel-default col-md-8" style="padding: 0;">
<!-- Default panel contents -->
<div class="panel-heading">Assessment Questions</div>
<div class="panel-body" >
<?php echo validation_errors(); ?>
<form id="signupform" action="<?php echo base_url(); ?>user/assessment/submit" class="form-horizontal" method="POST">
<input type="hidden" name='test_id' value='<?php echo $assessment['test_id']; ?>'>
<input type="hidden" name='user_id' value='<?php echo $this->session->userdata('user_id'); ?>'>
<?php echo "$temp"; ?>
<div class="form-group">
<!-- Button -->
<div class="col-md-offset-6 col-md-6">
<?php
if ($que_no == 1) {
?>
<a href="#" disabled class='btn btn-danger'>Previous</a>
<?php
} else {
?>
<a href="<?php echo base_url(); ?>user/assessment/index/<?php echo $assessment['test_id']; ?>/<?php echo ($que_no - 1); ?>" class='btn btn-info'>Previous</a>
<?php
}
if (isset($question['selected_options'])) {
?>
<button id="btn-signup" disabled type="submit" class="btn btn-danger"><i class="icon-hand-right"></i>   Save</button>
<?php
} else {
?>
<button id="btn-signup" type="submit" class="btn btn-info"><i class="icon-hand-right"></i>   Save</button>
<?php
}
if ($total_que == $que_no) {
?>
<a href="#" disabled class='btn btn-danger'>Next</a>
<?php
} else {
?>
<a href="<?php echo base_url(); ?>user/assessment/index/<?php echo $assessment['test_id']; ?>/<?php echo ($que_no + 1); ?>" class='btn btn-info'>Next</a>
<?php
}
?>
</div>
</div>
<input type="hidden" id="time_taken" name="time_taken" >
<div id="Countdown" style="width: 50%;"></div>
</form>
<a href="<?php echo base_url(); ?>user/assessment/solved/<?php echo $assessment['test_id']; ?>/<?php echo $this->session->userdata('user_id'); ?>" class='btn btn-info'>Finish Test</a>
</div>
</div>
</div>
<script>
$("#test_time").TimeCircles();
$("#Countdown").TimeCircles({
"animation": "smooth",
"bg_width": 0.8,
"fg_width": 0.1,
"circle_bg_color": "#60686F",
"time": {
"Days": {
"text": "Days",
"color": "#FFCC66",
"show": false
},
"Hours": {
"text": "Hours",
"color": "#99CCFF",
"show": false
},
"Minutes": {
"text": "Minutes",
"color": "#BBFFBB",
"show": true
},
"Seconds": {
"text": "Seconds",
"color": "#FF9999",
"show": true
}
}
});
$("#btn-signup").click(function() {
$("#time_taken").val($("#Countdown").TimeCircles().getTime());
});
</script>
<script type="text/javascript">
setInterval(ajaxCall, 1000); //300000 MS == 5 minutes
function ajaxCall() {
var test_time=$("#test_time").TimeCircles().getTime();
if(test_time >= 0){
$.post("<?php echo base_url(); ?>user/assessment/set_test_time", { test_time : test_time }, function(data, status) {
});
}else{
$.get("<?php echo base_url(); ?>user/assessment/solved/<?php echo $assessment['test_id']; ?>/<?php echo $this->session->userdata('user_id'); ?>",function(data, status) {
location.reload();
});
}
}
</script>
<script type="text/javascript">
$(function () {
$(document).bind('contextmenu', function (e) {
e.preventDefault();
});
});
function disableF5(e) { if ((e.which || e.keyCode) == 116 ||(e.which || e.keyCode)==8) e.preventDefault(); };
$(document).on("keydown", disableF5);
</script>
这是我的 home.php
View 文件,我从那里将用户重定向到 assessment.php
<?php
$temp = "";
$sr_no = 0;
foreach ($assessments as $assessment) {
$solved = $assessment['solved'];
$test_id = $assessment['test_id'];
$test_name = $assessment['test_name'];
$status = $assessment['status'];
if ($status == "1") {
$status = "Active";
} else {
$status = "InActive";
}
$sr_no++;
$temp.="<tr>
<td></td>
<td>$sr_no</td>
<td>$test_name</td>
<td>$status</td>";
if($solved=="0"){
$temp.="<td><a target='_blank' class='btn btn-info' onClick='return confirm(\"Are you sure want to Start Assessment...!\");' href='javascript:window.open(\"".base_url()."user/assessment/index/$test_id\",\"User Assessment\", \"titlebar=no,toolbar=no,menubar=no,width=screen.width,height=screen.height,fullscreen=yes\");' title='Take Test'>Take Test</a></td>";
}else if($solved=="1"){
$temp.="<td><a class='ml10' href='".base_url()."user/assessment/view/$test_id' title='View'>
<i class='glyphicon glyphicon-search'></i></a></td>";
}
$temp.="</tr>";
}
?>
<link rel="stylesheet" href="<?php echo base_url(); ?>resource/css/bootstrap-table.css">
<div class="container">
<div class="page-header center">
<h1>User Assessment System! User Dashboard <small><?php echo $title; ?> </small></h1>
</div>
<?php $this->load->view('alert'); ?>
<div class="panel panel-default">
<!-- Default panel contents -->
<div class="panel-heading">Manage Assessment</div>
<div class="panel-body" >
<!-- Table -->
<table class="table" id="userstable" data-toggle="table" data-pagination="true" data-show-refresh="true" data-export-types="{'pdf','xml','joson','png','excel'}" data-show-export="true" data-show-toggle="true" data-show-columns="true" data-search="true">
<thead>
<tr>
<th data-field="state" data-checkbox="true"></th>
<th>#</th>
<th data-field="que_dscp" data-sortable="true">Assessment Name</th>
<th data-field="status" class="text-center">Status</th>
<th data-field="ques" class="text-center">Start/View Test</th>
</tr>
</thead>
<tbody>
<?php echo "$temp"; ?>
</tbody>
</table><br>
</div>
</div>
</div>
<script src="<?php echo base_url(); ?>resource/js/bootstrap-table.js"></script>
<!-- put your locale files after bootstrap-table.js -->
<script src="<?php echo base_url(); ?>resource/js/bootstrap-table-en-US.js"></script>
最佳答案
您绝对没有办法限制某人在不受您控制的位置。
无论您对我的浏览器或什至是我的操作系统做什么,我总是可以使用第二台计算机或我的手机,或者身边有一本书,一张纸,或者一个懂事的 friend 。
检测此类事件的唯一方法是用摄像头全程拍摄用户。
除此之外,你还必须拍摄屏幕 - 也用相机,而不是通过屏幕录像机,否则我可能只是使用虚拟机进行考试,其中浏览器一直处于全屏状态,但我只需按 alt-Tab 键退出 VM 并执行任何我想做的事情,而屏幕录像机只会看到 VM 的内部。
因此您实际上不能限制用户 - 您唯一可以尝试的就是监视他们。
这至少需要一个麦克风和两个摄像头,可能更多 - 一个用于拍摄屏幕(以便您之后可以真正识别出一些东西),其余的用于拍摄用户及其整个可能的视野(不要忘记天花板,可能有文字或其他东西)。当然,麦克风是为了确保用户在考试期间没有声音输入——这也意味着他们不能戴耳机,否则他们可能会使用一些基于声音的界面。
例如,我想象一个服务,在通过热键激活后,打开一个不可见的浏览器窗口,捕获你的键盘输入,在点击 Return 时进行谷歌搜索,让你通过箭头键/返回/Tab/Backspace/Esc 并朗读您“选择”的任何文本。
我相信在 OS X 上,人们只需要找到一种使窗口不可见的方法 - 然后他们可以激活旁白,将他们的起始页设置为 Google 并使用 Automator 创建一个服务来打开一个新的浏览器窗口(不可见),然后他们可以分配一个热键。
此外,所有录音都应实时传输,否则用户有机会篡改。
既然我写了这篇文章,我意识到这可能更像是一个关于 Information Security 的问题。 .
关于javascript - 如何禁用浏览器功能和快捷键以进行全屏在线考试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30612018/
如何检测在 WPF 中按下了 Ctrl + O 等快捷键(独立于任何特定控件)? 我 try catch KeyDown但KeyEventArgs不会告诉我 Control 或 Alt 是否已关闭。
我想给 JMenuItem 添加一个热键。我学会了如何添加看起来像 CTRL+SOME_KEY 的键。但我需要的是三重热键。类似 CTRL+ALT+W 的东西。我想给 JMenuItem 添加一个热键
我被要求制作一个日文版的桌面应用程序,将来可能会是中文版。所有字符串都保存在资源文件中,其中一些包含用于显示访问/快捷键的下划线,例如“_Save”或“Save _As ...”。当按下 Alt 键时
命令 我们在前面HelloWord章节中已经提到了命令写法,这里再重温一下。 context.subscriptions.push(vscode.commands.registerComma
我目前正在 MSDN 中游泳(淹没),寻找此问题的答案: 像 OneNote 一样,我希望我的通用 Windows 应用程序能够监听快捷方式。然后运行一些东西,并显示结果。 所以我发现了这个关于 La
就目前情况而言,这个问题不太适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、民意调查或扩展讨论。如果您觉得这个问题可以改进并可能重新开放,visit
我对 Qt 完全陌生。 如何在 Mac 上用代码定义 Cmd + 数字键 键序列? 对于 Windows,我有 QKeySequence(QString("Ctrl+") + QString::num
我为javascript函数制作了一个快捷键。我设置了 S 键来启动此功能,因此设置了 Z 键来清除间隔功能,但我对此感到厌倦,当按 Z 键时,间隔不会停止:( var isCtrl = false;
问题: 我有一个 WebBrowser 并公开了它的 ActiveX 方法。在我的 WebBrowser 所在的表单中,我有一个带有快捷方式的 MainMenuStrip。只有当我在我的表单上的文本框
我正在尝试实现编辑器的快捷方式,但到目前为止还没有取得任何成功。 我想覆盖一些默认的 QScintilla 快捷键。我读过这篇answer ,但我不确定这是否有助于解决我的问题。 我还阅读了 Scin
基本配置(萌新看,大佬请跳到下一节) 1、创建项目 点击Create New Project创建新的项目,点击Open打开已有的项目。 先选择左侧的项目类型,在右边选择项目的所在目录,强烈
当我想用快捷键 ctrl + / 注释或注释掉我的代码时,IntelliJ 将 // 放在第一列而不是电流。当前如何发表评论? 例子 System.out.println(set.co
我经常更改编辑器的字体大小。那么有没有人知道快捷键?到目前为止,我必须通过几次点击来使用菜单:首选项 -> 颜色和字体 -> 基本 -> 文本字体。可以使用 CTRL + MouseWheel 会很好
如何将 Xcode 4 快捷键重置为默认值? Xcode -> 性能 -> 键绑定(bind) 我发现我设置了错误,但找不到重置为原始的方法。 我该怎么办?重新安装 Xcode 4? 最佳答案 只需单
我试图从 TEdit 的 OnKeyPress 事件中检测 Ctrl+V,并且我已经请注意,当按 Ctrl+AnyKey 时,Key 参数会采用不寻常的值。 示例: procedure TForm1.
我定义了这些 requireJs 选项: require.config({ baseUrl: '/js/', paths: { jquery: '/components
最近,FoxitReader for Linux 正式推出,我很喜欢。 http://www.webupd8.org/2015/09/foxit-pdf-reader-sees-new-linux-r
如果您通过查找或 Shift + Cmd + O 在 Appcode 中打开文件,您看不到该文件在项目中的哪个文件夹中。在项目资源管理器中,左侧顶部栏上有一个按钮,如果您将鼠标悬停在它上面,它会显示文
Eclipse 中是否有快捷键可以用其 unicode 转义序列 (\uXXXX) 替换特殊字符(重音)? 最佳答案 作为替代方法,您可以使用 Java 编辑器模板(请参阅 Eclipse Prefe
在 Visual Studio 中,当您在按钮等文本中的字母前使用“&”来获取带下划线的字母快捷方式时,ALT + that letter 执行按钮等。 我想知道如何在 Java 中做到这一点。我知道
我是一名优秀的程序员,十分优秀!