我正在使用Express.js服务器开发一个项目。该服务器如何知道其用户(浏览器)是否已关闭或重新加载?
答案 0 :(得分:1)
Web服务器没有通用的方法来知道浏览器中是否已关闭页面,因为浏览器不会自动通知服务器该操作,并且大多数网站都不需要知道。浏览器重新加载将作为新请求的页面加载显示在服务器上。
在用户页面中检测操作的更常用方法是使用客户端Javascript,然后在您想要告诉服务器的有趣事情时对服务器进行ajax调用。
如果您尝试检测浏览器窗口/页面何时关闭,则用于检测页面是否已在浏览器中关闭的一种常用方法是使用与服务器的webSocket或socket.io连接。只要页面处于活动状态,此连接就是连续的,但只要浏览器关闭该页面(用户导航到其他地方,重新加载,关闭选项卡,关闭浏览器等等),浏览器就会关闭webSocket或socket.io连接到服务器和服务器可以使用它作为页面已在浏览器中关闭的通知。
当然,如果用户正在重新加载,那么服务器将看到websocket或socket.io连接关闭,然后查看对页面的新副本的请求,然后查看新的webSocket或socket.io连接成立。如果您想要识别页面关闭和重新加载之间的不同,那么您通常会使用某种带有用户cookie的计时器。当您看到原始webSocket或socket.io连接关闭时,您将设置一个计时器一段很短的时间(如1秒),如果该用户没有加载页面并重新建立一个新的webSocket / socket.io连接下一秒,它必须是页面关闭活动而不是页面重新加载。如果您确实在1秒内看到该用户的新页面请求,那么它必须刚刚重新加载页面。通常使用cookie来标记哪个用户正在发出请求。