我有一个ember应用程序,用户存储在MySQL数据库中。当用户退出(即关闭其浏览器窗口)时,需要从数据库中删除它们。我在其中一个路径文件中有以下代码:
setupController: function () {
$(window).on('beforeunload', () => {
this.get('currentUser').delete();
});
},
在我的测试中,这似乎只是在70-80%的时间内从数据库中删除用户,并且无论如何它似乎是随机的,无论它是否有效。我猜这是因为有时在浏览器关闭窗口之前函数没有及时运行。如何确保每次用户退出时都会执行删除用户的代码?
答案 0 :(得分:1)
这样做不会有效。原因:当用户关闭窗口/选项卡时,浏览器会中断任何请求(甚至是ajax)到后端。 我建议在后端实现清理。您需要的是上次用户执行某些操作时的存储,并删除那些在一段时间内没有发出任何请求的人(例如,如果1小时内没有请求,您可以非常确定用户关闭了浏览器窗口) 。您也可以偶尔从您的ember应用程序向后端执行“ping”请求,因此不会删除空闲用户。