用户注销或会话结束时删除文件

时间:2010-06-15 20:32:32

标签: .net asp.net vb.net file global-asax

我正在尝试删除当前用户点击退出按钮时创建的文件

Protected Sub OnLoggingOut(ByVal sender As Object, ByVal e As EventArgs) Handles LoginStatus1.LoggingOut
        Try
            Dim folder As String = Server.MapPath("~/uploads/")
            Dim files As String() = Directory.GetFiles(folder)

            For Each f In files
                Dim filename As String = Path.GetFileName(f)
                If filename.Contains(HttpContext.Current.User.Identity.Name) Then
                    File.Delete(filename)
                End If
            Next
        Catch ex As Exception
            LogFile(ex.Message(), DateTime.Now)
        End Try
    End Sub

此事件被执行/调用,甚至是file.delete,但文件不会被删除。 这个代码是否有问题,或者服务器在注销时没有执行任何服务器方法?

如何在会话结束时删除文件? 它给我一个错误,说服务器方法无法执行

2 个答案:

答案 0 :(得分:1)

你说你已经跟踪了执行并调用了正确的方法和文件,但实际上没有被删除?

您应该收到更详细的错误消息。您的LogFile中有什么?

立即启动,听起来像服务器上的ASP.NET进程可能没有适当的权限来执行此操作(如果我没记错的话,它们需要比默认安装更多的权限)。

我在其他地方看到一个非常奇怪的问题,如果文件是“旧的”,对我们来说,这是~12<小时,该过程将无法删除该文件,但对于新创建的文件,它删除它们就好了。如果是这种情况,我不知道该告诉你什么,也许你可以找到解决办法。

最后,正如@Aristos建议的那样,您应该检查以确保用户名不为空。用户超时,按回按钮等并使ASP.NET“忘记”会话或应用程序变量之类的事情并不少见。

答案 1 :(得分:1)

似乎是一种复杂的做事方式。

他们的文件必须在用户会话结束时删除吗?

为什么不编写一个监视该目录的小程序,并删除任何超过n个周期的文件。 (会话长度,或24小时或其他)。

存在多个实用程序,并且.net也支持它...比你不必担心孤立文件因为应用程序重新启动而用户会话事件没有正确触发..也会更加安全你的asp.net应用程序不需要IIS目录写访问。只是小型独立Windows服务可以处理它。