Сессия отличается, если flash загружает фотографию на страницу aspx

У меня есть aspx с именем user-photo-upload.aspx и другой aspx с именем get-photo.aspx. Я установил Session["PhotoId"] в методе page_load файла user-photo-upload.aspx.

Если я обычно посещаю user-photo-upload.aspx через браузер, сеанс можно получить в get-photo.aspx. Но если флэш-память загружает фотографию на страницу user-photo-upload.aspx, я не могу получить Session["PhotoId"] в get-photo.aspx.

Я обнаружил, что идентификатор сеанса отличается при посещении страницы с помощью браузера в обычном режиме или с помощью флэш-памяти. Я не знаю, почему flash использует другой сеанс.

Что я должен делать?


person Billy    schedule 17.03.2011    source источник


Ответы (2)


Подключаемый модуль Flash действует как отдельный клиент, поэтому ожидаемым поведением является получение как браузером, так и подключаемым модулем индивидуальных идентификаторов сеанса.

Вам придется обойти это, установив исходный идентификатор сеанса в качестве переменной во Flash-ролике либо в виде FlashVar, либо через JavaScript, а затем отправив его в качестве параметра GET на сервер вместе с первым отправленным запросом и заменив новый Идентификатор, созданный для клиента Flash, с тем, который был предоставлен серверу.

Этот вопрос относится к такая же проблема в Java, возможно, это поможет вам решить вашу проблему.

person weltraumpirat    schedule 17.03.2011

У нас была такая же проблема с Flash Uploader. Вот так мы решили...

(1) Мы добавили новый параметр session_id в код инициализации на стороне клиента Flash Uploader:

<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, чтобы принимать идентификаторы сеанса из запроса:

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);
    }
}
person Krisztián Balla    schedule 12.02.2014