我有一个下载页面,其中包含指向本地存储在 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
调试显示,只要在浏览器中单击“打开”,就会触发 Global.asax Session_Start() 事件。
如果您保存文件然后在 IE 中查看它,则不会创建新会话。仅当您单击上图所示的“打开”按钮时才会出现问题。
为什么会这样,我该如何预防?
核心问题是,当我的应用程序看到新会话启动并且用户拥有有效的表单身份验证 cookie 时,它假定 IIS 已重新启动并删除用户的 cookie。因此,每次用户打开 Word 文档时,他们都会退出应用程序。