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

时间:2014-08-30 05:06:35

标签: php session

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

从下面的代码可以看出,我要做的是创建一个文件来在服务器上存储一些查询结果,并保持它直到会话运行,然后最终只在会话结束后删除它。

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

由于

4 个答案:

答案 0 :(得分:1)

简短回答:

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

答案很长:

首先,当会话实际结束时,您需要了解会话的工作原理吗?

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

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

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

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

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

  1. 将文件内容存储在会话数组而不是文件系统
  2. 重新发明轮子并为某个文件夹中的每个会话创建唯一的文件名,修改每个页面命中的最后访问时间,在脚本末尾 - 删除所有未长时间修改的文件

答案 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