2013-10-12 23 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