代码之家  ›  专栏  ›  技术社区  ›  rs.

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

  •  2
  • rs.  · 技术社区  · 16 年前

    我试图删除当前用户单击注销按钮时创建的文件

    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 回复  |  直到 16 年前
        1
  •  1
  •   Sonic Soul    16 年前

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

    是否必须在用户会话结束时删除这些文件?

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

    有很多实用程序,而且.NET也非常支持它。而不用担心孤立文件,因为应用程序重新启动,用户会话事件没有正确触发。另外,由于您的ASP.NET应用程序不需要IIS目录写访问权限,因此更安全。只有小型的独立Windows服务可以处理它。

        2
  •  1
  •   rlb.usa    16 年前

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

    您应该得到更详细的错误消息 . 你的日志文件里有什么?

    一开始,服务器上的ASP.NET进程可能没有执行此操作的适当权限(如果我记得正确,它们需要比默认安装更多的权限)。

    我在其他地方看到了一个非常奇怪的问题,如果文件是“旧的”,对于我们来说,这是大约12个小时,进程将无法删除该文件,但是对于新创建的文件,它删除了它们。如果是这样的话,我不知道该告诉你什么,也许你可以找个工作。

    最后,正如@aristos建议的那样,您应该检查以确保用户名不为空。对于用户来说,超时、按后退按钮等并导致ASP.NET“忘记”诸如会话或应用程序变量的事情并不少见。