Javascript 窗口关闭时清除会话

Javascript 窗口关闭时清除会话,javascript,php,jquery,Javascript,Php,Jquery,我正在处理一个考试项目,当用户启动一个测试时,它会在新的窗口中逐个窗口打开。open()。如果用户在测试完成之前关闭了测试,那么会话会产生问题,所以我想在用户关闭浏览器窗口时清除会话,或者在测试完成之前隐藏/禁用关闭按钮。您在这里提出的任何问题都不会被用户忽略;欢迎使用客户端编程(实际的浏览器“关闭”按钮不在您的范围内)。你可以点击(许多网站这样做是为了弹出一个confirm(“你想离开这个页面吗?”)对话框),但即使是这样,任何知道如何打开浏览器控制台的人都很容易绕过(例如,每个浏览器上都有F

我正在处理一个考试项目,当用户启动一个测试时,它会在新的窗口中逐个窗口打开。open()。如果用户在测试完成之前关闭了测试,那么会话会产生问题,所以我想在用户关闭浏览器窗口时清除会话,或者在测试完成之前隐藏/禁用关闭按钮。

您在这里提出的任何问题都不会被用户忽略;欢迎使用客户端编程(实际的浏览器“关闭”按钮不在您的范围内)。你可以点击(许多网站这样做是为了弹出一个
confirm(“你想离开这个页面吗?”)
对话框),但即使是这样,任何知道如何打开浏览器控制台的人都很容易绕过(例如,每个浏览器上都有F12),因为他们可以重新定义
window.confirm=(()=>true)并且不会被确认对话框打扰。

部分解决方案是使用
onbeforeuload
并在调用请求后将其发送回服务器。
一旦服务器收到请求,您就可以销毁会话。
同样,这在客户端很容易绕过,但确实提供了额外的功能

window.onbeforeunload = function() {
   // AJAX to server
};

你可以在这里使用这个答案:

这会给你一个信息:“你确定要离开这个页面吗?”


在该函数中,您可以在关闭页面之前提交一个ajax,该ajax将调用脚本来执行会话_destroy()。

我想您可以将会话过期时间设置为几秒钟?并执行ajax请求来维护它,而学生在回答问题时

可以使用带有iframe的弹出框吗

<div id="test-popup">
    <iframe src="/test/12345">
</div>

这只是一个例子。您需要更多的CSS和JS才能使其正常工作。

您无法通过JavaScript禁用关闭按钮,而其他任何解决方案都无法解决此可能的重复?不幸的是,无法保证安全性。因为用户可以禁用javascript或更改cookies值。没有新窗口。没有浏览器的窗口块。没有关闭按钮。
$('#test-popup').show();