2013-10-12 29 views
0

嗨,我不是很熟悉如何asp.net各屆會議的工作,但一些閱讀後,我發現,它可以幫助我解決,我有不費力的問題。的Session_OnEnd行爲

我的問題是有關地方允許用戶上傳的服務器上的一些文件,但實際上不是它們保存在數據庫中,直到他按下按鈕後的情況。

如果他上傳的文件,並關閉瀏覽器的文件保留在文件系統中並沒有知道什麼文件都保存在這裏的方式。

爲了解決這個問題,我決定將文件的詳細信息存儲在會話中,但保存在文件系統而不是實際的文件。

當頁面先裝入清理文件系統是基於存儲在所述會話中的數據執行。現在

剩下的唯一的事情是能夠處理用戶關閉瀏覽器和會話在此期間到期的情況。

經過一番研究,我發現,當即使在瀏覽器關閉的Session_OnEnd方法是符文,所以我說我的代碼在這裏會話過期:

public void Session_OnEnd() 
{ 
    var session = Session[Constants.FILE_SHARE_DOCUMENT]; 
    if (session != null) 
    { 
     var documents = (List<Document>)session; 
     foreach (var document in documents) 
     { 
      string filePath = Path.Combine(Constants.SERVER_PATH, document.StorageFileName); 
      File.Delete(filePath); 
     } 
    } 
} 

我已在會議結束也設置爲1分鐘,它似乎適用於我嘗試過的所有案例。

誰能確認這是否是解決我的問題的一種可靠的方法?

有什麼我失蹤?

回答

2

這是不是有很多原因的可靠機制。

首先,設置會話到1分鐘?這不是很長..你真的想要暫停一分鐘的用戶讓他們的會話結束嗎?你的意思是你把它設置爲1分鐘才能測試?通常,會話超時更像20分鐘。

其次,Session_End中不會得到所謂的在工作進程被回收的情況。這可能是,如果工作進程崩潰,設置爲按計劃回收,或者手動回收。

我只想有你的清理過程中刪除有時間戳超過一定時間時的所有文件。這很簡單,容易。

+0

我設置它只是用於測試目的一分鐘在應用程序的會話設置爲60分鐘 – aleczandru