我有一个下载页面,其中包含指向本地存储在Web服务器上的文件的链接。当用户打开一个文本文件时,一切都很好,但是当他们打开Office文件并从IE或Firefox中的对话框中选择“打开”时,ASP会创建一个新的会话。下载文件时ASP.MVC会话丢失
我简化控制器的方法是:
<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文档时,他们都会从应用程序中注销。
您是否在使用会话状态进行应用授权?如果是这样,你有严重的安全漏洞...会话不应该用于安全。 –
不,我正在使用表单身份验证的自定义实现。会话状态和“注销”之间的链接是,如果我检测到新会话并且用户具有有效的表单身份验证cookie,则我假定IIS重置并删除其auth cookie以保持数据完整性。请参阅http://www.netnewsgroups.net/aspnet/t4780-forms-authentication-session-expiration.aspx – nunzabar