簡體   English   中英

會話結束后從服務器刪除文件

[英]Deleting File From Server After Session Ends

您能告訴我在用戶關閉瀏覽器或注銷時如何在會話結束后從服務器中刪除文件嗎?

從下面的代碼中可以看到,我正在嘗試創建一個文件來在服務器上存儲一些查詢結果,並將其保存到會話運行為止,然后最終僅在會話結束后才將其刪除。

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

謝謝

簡短答案:

這是不可能的,因為會話結束時不會執行php代碼

長答案:

首先,您需要了解會話如何工作,會話實際上何時結束?

當用戶關閉瀏覽器時-php會話未關閉,當用戶注銷時-php會話未關閉。

PHP會話基本上是用戶首次打開站點時生成的名稱的文件。 該文件名作為cookie存儲在用戶的瀏覽器中。 對於每個請求,瀏覽器都發送此cookie,並在代碼中調用session_start時-從http請求中讀取此cookie,將打開具有該名稱的文件並將其加載到內存中。 (注意:會話可以存儲在內存緩存,數據庫等中)

下一步-您可以調用session_destroy,它只會刪除文件(數據庫記錄等)。 因此,下次瀏覽器使用舊Cookie致電給我們時-我們將不會讀取任何內容,即會話為空。

會話可以自動到期,它是由php在內部完成的(我想是通過內部線程或其他某種機制執行的),以使php存儲每個會話的上次訪問(讀取)時間以及某個會話文件一段時間沒有被觸摸(可配置)參數)-此文件已刪除。 php目前不會調用您的代碼,因此在php結束會話時無法刪除某些內容。

因此,要解決您的問題,您可以:

  1. 將文件內容存儲在會話數組中,而不是文件系統中
  2. 重新發明方向盤並在某個文件夾中為每個會話創建唯一的文件名,在腳本末尾修改每個頁面命中的上次訪問時間-刪除所有長時間未修改的文件

您只需使用unlink函數在PHP中檢測文件,

unlink('test.html');

確保已授予php所需的權限,

chmod('/var/www/html', 0750);

如果用戶確實注銷,請在執行注銷操作后刪除文件。 或者您可以運行一個小腳本來檢查會話是否有效(您可以記錄一個標志以檢查用戶是否在處理中),然后刪除關聯的文件。

您可以編寫一個自定義會話處理程序,並通過session_set_save_handler()配置。 從默認的SessionHandler擴展您的處理程序,並覆蓋destroy()gc()方法。 更多信息: http : //php.net/manual/zh/class.sessionhandler.php

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM