Tôi đang sử dụng Trình tải lên của Yahoo, một phần của Thư viện giao diện người dùng Yahoo, trên trang web ASP.Net của tôi để cho phép người dùng tải tệp lên. Đối với những người không quen thuộc, người tải lên hoạt động bằng cách sử dụng một applet Flash để cho tôi quyền kiểm soát nhiều hơn đối với hộp thoại FileOpen. Tôi có thể chỉ định bộ lọc cho các loại tệp, cho phép nhiều tệp được chọn, v.v. Rất tuyệt, nhưng có giới hạn được ghi lại sau đây:Tôi có thể đặt ID phiên ASP.Net trong trường biểu mẫu ẩn không?
Do lỗi Flash đã biết, Trình tải lên đang chạy trong Firefox trong Windows không gửi đúng cookie với nội dung tải lên; thay vì gửi cookie của Firefox, nó sẽ gửi cookie của Internet Explorer cho miền tương ứng. Để giải quyết vấn đề này, chúng tôi khuyên bạn nên sử dụng phương pháp tải lên không có cookie hoặc thêm document.cookie vào yêu cầu tải lên.
Vì vậy, nếu người dùng đang sử dụng Firefox, tôi không thể dựa vào cookie để duy trì phiên của họ khi họ tải tệp lên. Tôi cần phiên của họ vì tôi cần biết họ là ai! Là một workaround, tôi đang sử dụng đối tượng Application thusly:
Guid UploadID = Guid.NewGuid();
Application.Add(Guid.ToString(), User);
Vì vậy, tôi đang tạo ra một ID duy nhất và sử dụng nó như một chìa khóa để lưu trữ các đối tượng Page.User
trong phạm vi ứng dụng. Tôi đưa ID đó làm biến trong POST khi tệp được tải lên. Sau đó, trong xử lý chấp nhận các tập tin tải lên, tôi lấy đối tượng người dùng thusly:
IPrincipal User = (IPrincipal)Application[Request.Form["uploadid"]];
thực này hoạt động, nhưng nó có hai nhược điểm rõ ràng:
Nếu IIS, hồ bơi ứng dụng, hoặc thậm chí chỉ ứng dụng được khởi động lại giữa thời gian người dùng truy cập trang tải lên và thực sự tải lên tệp, "nội dung tải lên" của họ bị xóa khỏi phạm vi ứng dụng và tải lên không thành công vì tôi không thể xác thực chúng.
Nếu tôi từng chia tỷ lệ thành một trang trại trên web (có thể là một khu vườn trên web), điều này sẽ hoàn toàn phá vỡ. Tôi có thể không lo lắng, ngoại trừ tôi có kế hoạch mở rộng ứng dụng này trong tương lai.
Có ai có cách nào tốt hơn không? Có cách nào để tôi vượt qua ID phiên ASP.Net thực tế trong một biến POST, sau đó sử dụng ID đó ở đầu kia để lấy phiên?
Tôi biết tôi có thể lấy ID phiên qua Session.SessionID
và tôi biết cách sử dụng YUI để đăng nó lên trang tiếp theo. Những gì tôi không biết là làm thế nào để sử dụng SessionID
để lấy phiên từ máy chủ trạng thái.
Có, tôi đang sử dụng máy chủ trạng thái để lưu trữ các phiên, do đó chúng vẫn tiếp tục chạy ứng dụng/IIS và sẽ hoạt động trong một kịch bản trang trại.
Đây chính là điều tôi đang tìm kiếm. Cảm ơn! –
Hey ... liên kết dường như bị hỏng..có thể cập nhật u? – Mulki
có, chúng tôi cần điều này! vui lòng cung cấp liên kết mới! – pilavdzice