在窗口关闭时清除会话


Clear session on window close

我正在研究一个考试项目,当用户开始测试时,它通过window.open()在新窗口中打开。如果用户在测试完成之前关闭测试,那么会话就会产生问题,所以我想在用户关闭浏览器窗口或在测试完成之前隐藏/禁用关闭按钮时清除会话。

你在这里想出的任何东西都不会被用户推翻;欢迎来到客户端编程(实际的浏览器"关闭"按钮不在您的范围内)。你可以点击onclose(很多网站这样做是为了弹出一个confirm("do you want to leave this page?")对话框),但即使是很容易被任何知道如何打开浏览器控制台的人绕过(例如,每个浏览器上的F12),因为他们可以重新定义window.confirm = (() => true);,而不会被确认对话框打扰。

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

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

你可以在这里使用这个答案:https://stackoverflow.com/a/1119324/1489237

这会给你提示"你确定要离开这个页面吗?"

在该函数上,您可以提交一个ajax,而不是消息,该ajax将在关闭页面之前调用脚本执行session_destroy()。

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

你可以使用内部有iframe的弹出框吗?

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

然后用JS打开:

$('#test-popup').show();

仅供示例使用。你需要更多的CSS和JS来使它工作