【问题标题】:Deleting files when user logouts or session end用户注销或会话结束时删除文件
【发布时间】:2010-06-15 20:32:31
【问题描述】:

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

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 但文件不会被删除。 这段代码有问题还是服务器在注销时没有执行任何服务器方法?

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

【问题讨论】:

  • 您需要检查 HttpContext.Current.User 不为空,还可能需要将 .Name 保存到会话变量中!如果你想删除文件。它在 vb 中,所以我无法给出答案,因为我熟悉 c#...但这是我的想法。
  • 是存储在会话中并使用会话获取用户名帮助。

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


【解决方案1】:

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

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

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

存在许多实用程序,.net 也对它提供了很好的支持.. 比您不必担心孤立文件,因为应用程序重新启动并且用户会话事件没有正确触发.. 也会更安全您的 asp.net 应用程序不需要 IIS 目录写访问权限。只需小型独立 Windows 服务即可处理它。

【讨论】:

  • 用户上传一个文件用它来创建和发送电子邮件,然后在注销应用程序应该删除它,否则我会有旧文件。在 session_start 中,我正在检查并删除任何超过一天的文件。但是这个事件只有在有人再次访问这个应用程序时才会执行。在这种情况下,您的想法听起来很有趣,但是根据会话长度删除很棘手,因为用户会话可能会超过默认值
  • 是的,但是使用目录侦听器,它将删除所有旧文件。他们不必在用户离开后立即消失......而且您不必依赖会话结束事件,这不是 100% 可靠的。例如,如果您的服务器或 IIS 弹跳,它不会为所有会话触发会话结束事件......而不是留下孤立的文件。
  • 是的,我知道会话结束不可靠。我可能会创建一个服务,每 24 小时删除一次所有文件,感谢您的建议。我会将这个问题再开放几个小时以供其他用户查看
【解决方案2】:

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

您应该会收到更详细的错误消息。您的日志文件中有什么?

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

我在其他地方看到了一个非常奇怪的问题,如果文件是“旧”的,对我们来说,这大约是 12

最后,正如@Aristos 建议的那样,您应该检查以确保用户名不为空。用户超时、按下后退按钮等并导致 ASP.NET “忘记”诸如 Session 或 Application 变量之类的事情并不少见。

【讨论】:

  • 我在尝试调试时没有任何异常,因此无法解决此问题,使用会话解决了我的问题。但我仍然无法在会话结束时执行此操作。它不允许任何服务器方法,如 server.mappath、directory.getinfo
  • 如果您被锁定以致无法读取目录信息,您可能也被锁定在文件 I/O 操作之外。我的朋友,除非您联系到高于自己的人,否则您将陷入困境。
猜你喜欢
  • 2011-05-23
  • 1970-01-01
  • 1970-01-01
  • 2011-04-10
  • 1970-01-01
  • 2018-08-17
  • 2016-04-27
  • 2015-03-30
  • 2017-11-15
相关资源
最近更新 更多