2011-03-17 42 views
1

我有一個名爲user-photo-upload.aspx的aspx和另一個名爲get-photo.aspx的aspx。我在user-photo-upload.aspx的page_load方法中設置了Session [「PhotoId」]。會話是不同的,如果Flash上​​傳照片到aspx頁

如果我通過瀏覽器正常訪問user-photo-upload.aspx,則可以在get-photo.aspx中檢索會話。 但是,如果Flash將照片上傳到user-photo-upload.aspx頁面,我無法獲取get-photo.aspx中的Session [「PhotoId」]。

我發現使用瀏覽器正常訪問頁面或通過flash訪問頁面時會話ID是不同的。我不知道爲什麼Flash使用另一個會話。

我該怎麼辦?

回答

1

Flash插件充當一個單獨的客戶端,因此瀏覽器和接收單個會話ID的插件都是預期的行爲。

你必須通過設置原始會話ID作爲Flash影片一個變量來解決這個問題,無論是作爲一個Flash變量或通過JavaScript,然後發出第一個請求一起發送它作爲一個GET參數到服務器,並將爲Flash客戶端創建的新ID替換爲提供給服務器的新ID。

This question涉及Java的同樣的問題,也許它可以幫助你解決你的問題。

0

我們遇到了與Flash上​​傳器相同的問題。這就是我們如何解決它......

(1)我們增加了一個新的參數session_id到Flash上​​傳的客戶端初始化代碼:

<script type="text/javascript"> 
    var swfu<%=RandomId %>; 
    $(document).ready(function() { 
     swfu<%=RandomId %> = new SWFUpload({ 
    // Backend Settings 
    upload_url: "./picupload.aspx", 
    post_params : {      
     "PictureCategory" : "<%= EncryptedPictureCategory() %>", 
     "picture_id": "<%= EncryptedPictureId() %>", 
     "session_id": "<%= HttpContext.Current.Session.SessionID %>" 
    }, 
    // *snip* ... 
</script> 

(2)我們改變了我們的Session_Start方法Global.asax.cs接受來自請求的會話ID:

protected void Session_Start(Object sender, EventArgs e) 
{ 
    if (Request["session_id"] != null) 
    { 
     bool isRedirected, isCookieAdded; 
     string oldSessionId = Request["session_id"]; 
     SessionIDManager manager = new SessionIDManager(); 
     manager.RemoveSessionID(HttpContext.Current); 
     manager.SaveSessionID(HttpContext.Current, oldSessionId, out isRedirected, out isCookieAdded); 
    } 
    else 
    { 
     Response.Redirect(LoginPagePath); 
    } 
}