我创建了一个网页,要求用户填写表单,其中包括上传图片。为了允许用户在不刷新页面的情况下查看上载的图像,我使用AJAX将图像存储在临时目录中。如果表单未正确填写,则在提交时,临时目录中的图像将被删除。但是,如果用户在上传图像后关闭其Web浏览器或刷新页面而未提交表单,则会保留在临时目录中。
有没有办法检测用户是否已退出/刷新页面并随后取消链接临时目录中的图像文件?
答案 0 :(得分:1)
由于HTTP中客户端 - 服务器通信的性质,没有“简单”的方法。
最佳做法是将图像存储在临时目录中,然后存储带有图像的时间戳并运行删除超过30分钟(或任何超时)的图像的作业,或将图像链接到用户会话并检查会话是否仍然存在 - 如果会话因任何原因而死亡,请删除该图像。
您可以使用
设置会话处理程序bool session_set_save_handler(回调$ open,回调$ close,回调$ read,回调$ write,回调$ destroy,回调$ 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停止时删除图像。这可能是最困难和最不可靠的方法,我不推荐它。
答案 1 :(得分:0)
检查一下,onunload。但最好的方法是使用一段时间后删除图像的cron作业。如果用户退出页面,很难以可靠的方式找到它。