我正在研究一个考试项目,当用户开始测试时,它会在window.open()的新窗口中打开。如果用户在完成之前关闭测试,则会话会产生问题,因此我想在用户关闭浏览器窗口时清除会话,或者在测试完成之前隐藏/禁用关闭按钮。
答案 0 :(得分:1)
这里你提出的任何内容都不会被用户所夸大;欢迎使用客户端编程(实际的浏览器“关闭”按钮不在您的掌控范围内)。你可以点击onclose(许多网站为了弹出一个confirm("do you want to leave this page?")
对话框而这样做)但是,任何知道如何打开浏览器控制台的人都很容易绕过它(每个都有F12)浏览器,例如)因为他们可以重新定义window.confirm = (() => true);
而不会被确认对话框打扰。
答案 1 :(得分:0)
部分解决方案是使用onbeforeunload
并在调用后将请求发送回服务器。
一旦在服务器上收到请求,您就可以销毁会话
同样,这很容易在客户端绕过,但确实提供了额外的功能。
window.onbeforeunload = function() {
// AJAX to server
};
答案 2 :(得分:0)
您可以在此处使用此答案:https://stackoverflow.com/a/1119324/1489237
这会给你留言“你确定要离开这个页面吗?”
在该函数上,您可以在关闭页面之前提交一个将调用脚本来执行session_destroy()的ajax而不是消息。
答案 3 :(得分:0)
我认为您可以将会话到期时间设置为几秒钟?当学生回答任务时,执行ajax请求来维护它
答案 4 :(得分:0)
你可以在里面使用带iframe的弹出式窗口吗?
<div id="test-popup">
<iframe src="/test/12345">
</div>
用JS打开它:
$('#test-popup').show();
这只是举例。你需要更多的CSS和JS才能使它有效。