我有一個下載頁面,其中包含指向本地存儲在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