嗨,我对asp.net SESSIONS的工作方式不是很熟悉,但是经过一番阅读后,我发现它可以帮助我解决我不费劲的问题。
我的问题与一种情况有关,在这种情况下,允许用户在服务器上上载某些文档,但实际上没有将它们保存到数据库中,直到他按下发布按钮为止。
如果他上载文档并关闭浏览器,则文档将保留在文件系统中,并且无法知道在其中保存了哪些文档。
为了解决此问题,我决定将文档的详细信息存储在会话中,而不是存储在fileSystem中的实际文档。
当页面首次加载时,将基于会话中存储的数据执行fileSystem的清理。
现在剩下的唯一事情就是能够处理用户关闭浏览器并且会话在此期间到期的情况。
经过一些研究,我发现即使会话关闭,即使浏览器关闭,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分钟,并且在我尝试过的所有情况下似乎都可以使用。
谁能确认这是否是解决我的问题的可靠方法?
有什么我想念的吗?
由于多种原因,这不是可靠的机制。
首先,将会话设置为1分钟?那不是很长。.您真的希望暂停一分钟的用户结束他们的会话吗?您的意思是您将其设置为1分钟以进行测试吗?通常,会话超时更像是20分钟。
其次,在工作进程被回收的情况下,Session_End将不会被调用。可能是,如果工作进程崩溃,设置为按计划回收或手动回收。
我只是让您的清理过程删除所有时间戳大于特定时间的文件。这很简单。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句