2013-09-30 18 views
5

Tôi có trang Tải xuống có liên kết đến các tệp được lưu trữ cục bộ trên máy chủ web. Tất cả là tốt khi người dùng mở tệp văn bản, nhưng khi họ mở tệp Office và chọn "Mở" từ hộp thoại kết quả trong IE hoặc Firefox, ASP tạo một phiên mới.Phiên ASP.MVC bị mất khi tải xuống tệp

phương pháp điều khiển đơn giản của tôi là:

<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 

Debugging cho thấy rằng ngay sau khi bạn bấm vào nút "Open" trong trình duyệt, sự kiện Global.asax session_start() được kích hoạt.

enter image description here

Nếu bạn Save file và sau đó xem nó trong IE một phiên mới không được tạo ra. Nó chỉ là một vấn đề nếu bạn nhấp vào nút Open như hình trên.

Tại sao điều này và cách tôi có thể ngăn chặn nó?

Vấn đề cốt lõi là khi ứng dụng của tôi thấy phiên mới bắt đầu và người dùng có cookie Xác thực biểu mẫu hợp lệ, nó giả định IIS khởi động lại và xóa cookie của người dùng. Vì vậy, mỗi khi người dùng mở tài liệu Word, họ sẽ đăng xuất khỏi ứng dụng.

+0

Bạn có đang sử dụng trạng thái phiên cho ủy quyền ứng dụng không? Nếu vậy, bạn có lỗ hổng bảo mật nghiêm trọng ... phiên không bao giờ nên được sử dụng để bảo mật. –

+0

Không, tôi đang sử dụng triển khai tùy chỉnh Xác thực biểu mẫu. Liên kết giữa trạng thái phiên và "đăng xuất" là nếu tôi phát hiện phiên mới và người dùng có cookie xác thực biểu mẫu hợp lệ, tôi giả sử IIS đặt lại và xóa cookie xác thực để duy trì tính toàn vẹn của dữ liệu. Xem http://www.netnewsgroups.net/aspnet/t4780-forms-authentication-session-expiration.aspx – nunzabar

Trả lời

2

Khi liên kết DOC được nhấp trong Internet Explorer, nó sẽ chuyển nó sang Word. Điều này có nghĩa là Word không tải xuống, không phải là IE. Bởi vì điều này, có một "kết nối trình duyệt" mới được thực hiện và một phiên mới sẽ được tạo ra bởi vì nó không thực sự là IE đang tải xuống.

+0

Được rồi, do đó giải thích "tại sao" ... bây giờ làm thế nào tôi có thể sửa chữa nó? Đây phải là một kịch bản phổ biến. – nunzabar

2

Tôi đang trả lời câu hỏi của riêng mình.

Tôi đã tìm thấy giải pháp sau khi Matt's answer chỉ cho tôi đúng hướng. Tôi chỉ tắt SessionState cho bộ điều khiển bằng cách thêm thuộc tính như sau:

<SessionState(SessionStateBehavior.Disabled)> 
Public Class AttachmentController 
    ... 
End Class 

Hiện tại Office có thể tải xuống tệp nhưng không kích hoạt phiên mới. Ứng dụng của tôi không còn bị hỏng nữa.

Các vấn đề liên quan