Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/249.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript PHP-如果用户退出网页,是否取消文件链接?_Javascript_Php_Jquery_Html_Ajax - Fatal编程技术网

Javascript PHP-如果用户退出网页,是否取消文件链接?

Javascript PHP-如果用户退出网页,是否取消文件链接?,javascript,php,jquery,html,ajax,Javascript,Php,Jquery,Html,Ajax,我创建了一个网页,要求用户填写表单,其中包括上传图像。为了允许用户在不刷新页面的情况下查看上传的图像,我使用AJAX将图像存储在临时目录中。如果表单填写不正确,则在提交时会删除临时目录中的图像。但是,如果用户在上载图像后关闭其web浏览器或刷新页面而不提交表单,则该图像将保留在临时目录中 是否有办法检测用户是否已退出/刷新页面,并随后取消临时目录中图像文件的链接?检查此项。但最好的方法是使用cron作业,在一段时间后删除图像。很难以可靠的方式确定用户是否已退出页面。由于HTTP中客户机-服务器通

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


是否有办法检测用户是否已退出/刷新页面,并随后取消临时目录中图像文件的链接?

检查此项。但最好的方法是使用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文件中吗?