下载文件时ASP.MVC会话丢失

nun*_*bar 5 asp.net asp.net-mvc

我有一个下载页面,其中包含指向本地存储在Web服务器上的文件的链接.当用户打开文本文件时,一切都很好,但当他们打开Office文件并从IE或Firefox中生成的对话框中选择"打开"时,ASP会创建一个新会话.

我简化的控制器方法是:

<HttpGet()>
<AppAuthorize(Domain.Security.TransactionId.Download)>
Public Function Download(fileName As String) As ActionResult
    ' fileName example: C:\ProgramData\MyCompany\MyApp\SomeFile.txt
    Return New FilePathResult(fileName, "application/octet-stream")
End Function
Run Code Online (Sandbox Code Playgroud)

调试显示,只要在浏览器中单击"打开",就会触发Global.asax Session_Start()事件.

在此输入图像描述

如果保存文件,然后在IE中查看它,则不会创建新会话.如果单击上图中的"打开"按钮,则只会出现问题.

为什么这样,我该如何预防呢?

核心问题是当我的应用程序看到新会话启动且用户具有有效的表单身份验证cookie时,它会假定IIS已重新启动并删除用户的cookie.因此,每次用户打开Word文档时,他们都会从应用程序中注销.

Mat*_*ser 2

当在 Internet Explorer 中单击 DOC 链接时,它会将其传递给 Word。这意味着 Word 负责下载,而不是 IE。因此,会建立一个新的“浏览器连接”并创建一个新会话,因为实际上并不是 IE 进行下载。