0

嗨,我对 asp.net SESSIONS 的工作方式不是很熟悉,但经过阅读后,我发现它可以帮助我解决一个我不费吹灰之力的问题。

我的问题与允许用户在服务器上上传一些文档但实际上在他按下发布按钮之前将它们保存在数据库中的情况有关。

如果他上传文件并关闭浏览器,文件仍保留在文件系统中,并且无法知道那里保存了哪些文件。

为了解决这个问题,我决定将文档的详细信息存储在会话中,而不是保存在文件系统中的实际文档。

当页面第一次加载时,会根据会话中存储的数据执行文件系统的清理。

现在唯一剩下的就是能够处理用户关闭浏览器和会话同时到期的情况。

经过一番研究,我发现当会话过期时,即使浏览器关闭 Session_OnEnd 方法也是 runes ,所以我在这里添加了我的代码:

 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 分钟,它似乎在我尝试过的所有情况下都有效。

谁能确认这是否是解决我的问题的可靠方法?

有什么我想念的吗?

4

1 回答 1

2

由于多种原因,这不是一种可靠的机制。

首先,将会话设置为 1 分钟?这不是很长.. 您真的希望暂停一分钟的用户结束他们的会话吗?您的意思是您将其设置为1分钟以进行测试?通常会话超时更像是 20 分钟。

其次,在工作进程被回收的情况下,不会调用 Session_End。这可能是,如果工作进程崩溃,设置为按计划回收,或者手动回收。

我只想让您的清理过程删除时间戳大于某个时间的所有文件。这很简单。

于 2013-10-12T18:06:16.030 回答