如果用户退出网页,取消文件链接

PHP - unlink file if user quits web page?

本文关键字:取消 文件 链接 网页 用户 退出 如果      更新时间:2023-09-26

我创建了一个网页,要求用户填写表单,其中包括上传图像。为了允许用户在不刷新页面的情况下查看上传的图像,我使用AJAX将图像存储在临时目录中。如果表单没有正确填写,在提交临时目录中的图像将被删除。但是,如果用户在没有提交表单的情况下上传图像后关闭web浏览器或刷新页面,则图像将保留在临时目录中。

是否有一种方法可以检测用户是否退出/刷新了页面并随后解除了临时目录中的图像文件的链接?

由于HTTP中客户端-服务器通信的性质,没有"简单"的方法来做到这一点。

最佳实践是将映像存储在临时目录中,然后存储映像的时间戳并运行一个作业,删除所有超过30分钟(或任何您想要的超时时间)的映像,或者将映像链接到用户会话并检查会话是否仍然存在-如果会话由于任何原因死亡,则删除映像。

您可以使用

设置会话处理程序

bool session_set_save_handler (callback $open, callback $close, callback $read, callback $write, callback $destroy, callback $gc)

使用destroy和gc处理程序删除文件。

您必须调用脚本来定义会话保存处理程序,至少在每个使用会话的脚本中都是如此。您可以将代码放在包含文件中,并在需要时包含它,或者使用php.ini

中的auto_prepend_file指令

如果你正在使用jQuery,你可以绑定到beforeunload事件:

$(window).bind("beforeunload", function() {
     //send a request to delete the file
}

你当然也可以使用Javascript发送keepalive请求到你的服务器(例如使用AJAX),并在这些keepalive停止时删除图像。这可能是最困难和最不可靠的方法,我不推荐这种方法。

检查这个,onunload。但是最好的方法是使用cron作业,在一段时间后删除映像。很难以可靠的方式发现用户是否退出了页面。