Javascript PHP-如果用户退出网页,是否取消文件链接?
我创建了一个网页,要求用户填写表单,其中包括上传图像。为了允许用户在不刷新页面的情况下查看上传的图像,我使用AJAX将图像存储在临时目录中。如果表单填写不正确,则在提交时会删除临时目录中的图像。但是,如果用户在上载图像后关闭其web浏览器或刷新页面而不提交表单,则该图像将保留在临时目录中Javascript PHP-如果用户退出网页,是否取消文件链接?,javascript,php,jquery,html,ajax,Javascript,Php,Jquery,Html,Ajax,我创建了一个网页,要求用户填写表单,其中包括上传图像。为了允许用户在不刷新页面的情况下查看上传的图像,我使用AJAX将图像存储在临时目录中。如果表单填写不正确,则在提交时会删除临时目录中的图像。但是,如果用户在上载图像后关闭其web浏览器或刷新页面而不提交表单,则该图像将保留在临时目录中 是否有办法检测用户是否已退出/刷新页面,并随后取消临时目录中图像文件的链接?检查此项。但最好的方法是使用cron作业,在一段时间后删除图像。很难以可靠的方式确定用户是否已退出页面。由于HTTP中客户机-服务器通
是否有办法检测用户是否已退出/刷新页面,并随后取消临时目录中图像文件的链接?检查此项。但最好的方法是使用cron作业,在一段时间后删除图像。很难以可靠的方式确定用户是否已退出页面。由于HTTP中客户机-服务器通信的性质,没有“简单”的方法可以做到这一点 最佳做法是将映像存储在临时目录中,然后使用映像存储时间戳,并运行删除所有超过30分钟(或任意超时)的映像的作业,或者将映像链接到用户会话并检查会话是否仍然存在-如果会话因任何原因而死亡,删除图像 您可以使用设置会话处理程序 bool会话\设置\保存\处理程序(回调$open、回调$close、回调$read、回调$write、回调$destroy、回调$gc) 使用销毁和gc处理程序删除文件 您必须调用该脚本,至少在每个与会话一起工作的脚本中定义会话保存处理程序。您可以将代码放在include文件中,并在需要时包含它,或者使用php.ini中的auto_prepend_file指令 如果使用jQuery,则可以绑定到beforeunload事件:
$(window).bind("beforeunload", function() {
//send a request to delete the file
}
当然,您也可以使用Javascript向服务器发送keepalive请求(例如使用AJAX),并在这些keepalive停止时删除图像。这可能是最困难和最不可靠的方法,我不推荐使用。您可能可以使用cookies/sessions/token(默认)超时值。假设我要设置
$\u SESSION['timeout']=false
,并且只有当用户提交帖子时才更改为true
。当用户退出页面时,我如何执行代码,例如if(!$\u SESSION['timeout']){//delete temp image}
(当用户刷新时会很容易)?谢谢没有可靠的方法知道这次访问是否结束。您应该将文件放在system tmp文件夹中,在这种情况下,它们最终将被删除,或者放在您自己进行清理的文件夹中。只需确保检查文件上的时间戳,以便您只删除超过1天左右的文件,因此,确保您不会删除当前正在使用的临时文件。最简单的方法是创建一个cronjob,删除所有早于n分钟
的图像。如果用户关闭了javascript,则不会执行此操作。我会调查克朗的工作。thanksI喜欢session方法,并且可以看到如果用户留在站点上(例如刷新页面),该方法将如何实现。但是,如果用户要关闭浏览器,我不确定如何检查会话变量并删除图像。有什么想法吗?我已经用处理会话破坏和超时(垃圾收集)的信息编辑了答案。这正是我想要的!只有一件事,当会话被破坏或“垃圾收集”清除运行时,我应该将要执行的函数存储在哪里?它应该在php.ini文件中吗?