Php 会话结束后从服务器删除文件

Php 会话结束后从服务器删除文件,php,session,Php,Session,当用户关闭浏览器或注销时,会话结束后,请告诉我如何从服务器中删除文件 正如您从下面的代码中看到的,我尝试创建一个文件来在服务器上存储一些查询结果,并将其保留到会话运行,然后在会话结束后才删除它 <? php session_start(); $info = "testFile.txt"; $ourFileHandle = fopen($info, 'w') or die("can't open file"); fclose($ourFileHandle); // How to Dele

当用户关闭浏览器或注销时,会话结束后,请告诉我如何从服务器中删除文件

正如您从下面的代码中看到的,我尝试创建一个文件来在服务器上存储一些查询结果,并将其保留到会话运行,然后在会话结束后才删除它

<?
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); 

您只需使用unlink函数在PHP中删除文件

unlink('test.html');
确保已向php授予所需的权限

chmod('/var/www/html', 0750);
简短答复:

这是不可能的,因为在会话结束时不会执行php代码

长答覆:

首先,您需要了解会话是如何工作的,会话何时实际结束

当用户关闭浏览器时-php会话未关闭,当用户注销时-php会话未关闭。

PHP会话基本上是用户第一次打开站点时生成的文件名。此文件名作为cookie存储在用户浏览器中。对于每个请求浏览器发送此cookie,当您在代码中调用session_start时-此cookie从http请求读取,具有此名称的文件将打开并加载到内存中。(注意:会话可以存储在memcache、数据库等中)

下一步-您可以调用session_destroy,它只删除文件(db记录等)。所以下次浏览器用旧cookie调用我们时,我们将什么也不读,即会话为空

会话可以自动过期,它是由php内部完成的(我想是由内部线程或其他机制完成的),为此,php存储每个会话的最后访问(读取)时间,并且当某个会话文件在一段时间内未被触碰时(可配置参数)-此文件被删除Php此时不会调用您的代码,因此在Php结束会话时无法删除某些内容

因此,要解决您的问题,您可以:

  • 将文件内容存储在会话数组而不是文件系统中
  • 重新发明控制盘,在某个文件夹中为每个会话创建唯一的文件名,修改每次点击页面的上次访问时间,在脚本末尾-删除所有长时间未修改的文件

  • 如果用户确实注销,只需在执行注销操作后删除文件即可。
    或者,您可以运行一个小脚本来检查会话是否有效(您可以记录一个标志来检查用户是否正在处理中),然后删除关联的文件。

    您可以编写一个自定义会话处理程序,并通过
    会话设置保存处理程序()对其进行配置。
    。从默认的
    SessionHandler
    扩展处理程序,并覆盖
    destroy()
    gc()
    方法。更多信息:

    有人能告诉我为什么这篇文章被否决了!您好,Shamal,谢谢您的回复,但我的问题是我应该在何时何地使用代码?在会话结束时_destroy();