我在我的ASP.Net網站上使用雅虎上傳器,雅虎UI庫的一部分,以允許用戶上傳文件。對於那些不熟悉的人來說,上傳器使用Flash小程序工作,讓我更好地控制FileOpen對話框。我可以爲文件類型指定一個過濾器,允許選擇多個文件等等。它很棒,但它具有以下記錄的限制:我可以在一個隱藏的表單字段中放置一個ASP.Net會話ID嗎?
由於已知的Flash錯誤,在Windows中的Firefox中運行的Uploader會沒有發送正確的cookies與上傳;它不是發送Firefox cookies,而是發送Internet Explorer的Cookie用於相應的域。作爲解決方法,我們建議使用無Cookie的上傳方法或將document.cookie附加到上傳請求。
因此,如果用戶使用Firefox,當他們上傳文件時,我不能依靠Cookie來堅持他們的會話。我需要他們的會議,因爲我需要知道他們是誰!作爲一種變通方法,我使用的應用程序對象正是如此:
Guid UploadID = Guid.NewGuid();
Application.Add(Guid.ToString(), User);
所以,我創建一個唯一的ID,並使用它作爲一個鍵存儲在應用程序範圍內Page.User
對象。當文件上傳時,我將該ID作爲變量包含在POST中。然後,在接受文件的上傳處理程序中,我抓住用戶對象正是如此:
IPrincipal User = (IPrincipal)Application[Request.Form["uploadid"]];
這實際工作,但它有兩個明顯的缺點:
如果IIS,應用程序池,或者甚至只是在用戶訪問上載頁面之間重新啓動應用程序,並且實際上傳文件時,他們的「uploadid」將從應用程序範圍中刪除,並且上傳失敗,因爲我無法對其進行身份驗證。
如果我擴展到一個網絡農場(甚至可能是一個網絡花園)的場景,這將徹底破壞。我可能不會擔心,除非我計劃在將來擴展此應用程序。
有沒有人有更好的方法?有沒有辦法讓我在POST變量中傳遞實際的ASP.Net會話ID,然後在另一端使用該ID來檢索會話?
我知道我可以通過Session.SessionID
獲得會話ID,並且我知道如何使用YUI將其發佈到下一頁。我不知道的是如何使用SessionID
從狀態服務器獲取會話。
是的,我使用狀態服務器來存儲會話,因此它們堅持應用程序/ IIS重新啓動,並且可以在Web場景中工作。
這正是我一直在尋找。謝謝! – 2008-10-27 15:58:41
嘿...鏈接似乎被打破..可以更新嗎? – Mulki 2010-10-28 07:00:24