请告诉我如何在用户关闭浏览器或注销后,在会话结束后从服务器删除文件。
从下面的代码可以看出,我要做的是创建一个文件来在服务器上存储一些查询结果,并保持它直到会话运行,然后最终只在会话结束后删除它。
<?
php session_start();
$info = "testFile.txt";
$ourFileHandle = fopen($info, 'w') or die("can't open file");
fclose($ourFileHandle);
// How to Delete a File When Session Ends on User closes the Browser or Log out
session_destroy();
$theFile = "info.txt";
$fh = fopen($theFile, 'w') or die("can't open file");
fclose($fh);
由于
答案 0 :(得分:1)
简短回答:
这是不可能的,因为会话结束时不执行php代码
答案很长:
首先,当会话实际结束时,您需要了解会话的工作原理吗?
当用户关闭浏览器时 - php会话未关闭,当用户注销时 - php会话未关闭。
PHP会话基本上是用户第一次打开网站时生成的文件名。该文件名作为cookie存储在用户的浏览器中。对于每个请求浏览器发送此cookie,当您在代码中调用session_start时 - 从http请求读取此cookie,打开具有此类名称的文件并将其加载到内存中。 (注意:会话可以存储在内存缓存,数据库等中)
下一步 - 您可以调用session_destroy,它只删除文件(db记录等)。所以下次浏览器用旧cookie打电话给我们 - 我们什么都不读,即会话是空的。
会话可以自动到期,它是由php内部完成的(我想通过内部线程或其他一些机制)来做这个php存储每个会话的最后访问(读取)时间以及某些会话文件没有被触及的时候时间(可配置参数) - 删除此文件。 Php此时不会调用您的代码因此,当会话以php结束时,无法删除某些内容。
因此,要解决您的问题,您可以:
答案 1 :(得分:0)
您可以使用unlink函数
在PHP中简单地检测文件unlink('test.html');
确保已向php提供所需权限,
chmod('/var/www/html', 0750);
答案 2 :(得分:0)
如果用户注销,只需在执行注销操作后删除文件。 或者您可以运行一个小脚本来检查会话是否有效(您可以记录一个标志来检查用户是否在进行中),然后删除相关文件。
答案 3 :(得分:0)
您可以编写自定义会话处理程序并通过session_set_save_handler()
进行配置。将处理程序从默认SessionHandler
扩展,并覆盖destroy()
和gc()
方法。更多信息:http://php.net/manual/en/class.sessionhandler.php