Flash player передает сеансовые куки автоматически?

Нет никакого доступа к cookie HTTP из фильма Flash, но я теперь неоднократно читал, что Flash player, как предполагается, заботится о сеансовых куки автоматически. Я не мог, однако, найти документацию об этом, и она уверенный не работала с моим клиентом Flex, работающим против бэкенда Struts с помощью cookie JSESSIONID по умолчанию.

Так, Flash player обрабатывает сеансовые куки или не делает этого, и если это делает, как я настраиваю его?

16
задан Hanno Fietz 29 January 2010 в 10:56
поделиться

3 ответа

Запросы HTTP из Flash отправляются через браузер - так да, файлы cookie передаются автоматически. На самом деле, я в настоящее время делаю сайт, который обрабатывает вход в систему (и, следовательно, устанавливает файл cookie сеанса) на странице HTML, а затем пересылает пользователю на страницу только на вспышке (). Страница Flash отправляет множество запросов на сервер, используя Urlloader & URLRequest , и я могу проверить файл cookie для каждого из них.

Это сказал, вы можете получить доступ к файлам файлов HTTP от Flash, используя ExternalInterface.call () . Убедитесь, что Prodemscriptaccess в SWF встраиваемого кода установлен на соответствующее значение.

var cookies:String = ExternalInterface.call("function()
    {
        return document.cookie;
    }()");

Обновление: я не пробовал это (войти в Flash), но вы можете быть вправо - Flash может игнорировать Set-cookie (или всех) заголовков ответа. И, к сожалению, Flash не допускает доступа к заголовкам ответа. Но поскольку можно получить доступ к заголовкам отклика в ответе AJAX (используя xhr.getResponseHeader ). Вы можете использовать ExternalInterface и Autsource . Возьмитесь за заголовки в ответ AJAX и установите файл cookie, используя JavaScript (согласно это так, что нить , браузер сделает это автоматически). После набора, последующие запросы, отправленные из Flash, будут включать в себя файл cookie сеанса.

Используйте метод ExternalInterFace.addcallback , чтобы зарегистрировать метод Flash, который должен быть Callable из JavaScript.

6
ответ дан 30 November 2019 в 23:18
поделиться

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

Если сайт отправляет Set-Cookie, это должно сработать.

Вы не можете получить доступ к заголовкам ответов из содержимого Flash, так же как вы не можете получить к ним доступ из JavaScript; есть фундаментальные причины безопасности, почему это так. Однако возможно, что когда-нибудь Flash Player позволит вам читать файлы cookie через API файлов cookie, как это делает JavaScript. Тем временем ExternalInterface позволит вам обращаться к JS для чтения файлов cookie.

Есть один случай, когда Flash Player не отправляет файлы cookie или даже может отправлять неправильные файлы cookie. Это когда вы используете FileReference.upload (). Это известная ошибка Flash Player, хотя Adobe ее очень сложно исправить из-за зависимостей NPAPI.

Кстати, JSESSIONID на данный момент считается небезопасным. Он уязвим для атак CSRF, потому что браузер будет отправлять его вслепую, независимо от того, чей документ делает запрос. Большинство современных систем входа в систему используют скрытое поле формы или другие средства, позволяющие сохранить одноразовый идентификатор входа доступным только для страниц из вашего домена.

Хотел бы я рассказать вам, почему ваше конкретное приложение не отправляет файлы cookie. Вы пробовали сравнить его с версией, полностью построенной на HTML? Вы шпионили за обоими сетевыми потоками с помощью анализатора пакетов?

3
ответ дан 30 November 2019 в 23:18
поделиться

Я уверен, что эта тема уже умерла, но я недавно столкнулся с похожей проблемой, используя ASP.NET и FileUpload, и нашел обходной путь, основанный на некоторых работах здесь.

Я создал компонент, который динамически записывает объекты Flex на страницу, чтобы их можно было использовать в UpdatePanels. Напишите мне, если вам нужен код. Чтобы решить описанную выше проблему на страницах, где аутентификационные cookies должны быть отправлены через URLRequest, я добавляю значения в виде flashVars.

Этот код работает только в моем объекте, но вы поняли идею

Dictionary<string, string> flashVars = new Dictionary<string, string>();     
flashVars.Add("auth", Request.Cookies["LOOKINGGLASSFORMSAUTH"].Value);
flashVars.Add("sess", Request.Cookies["ASP.NET_SessionId"].Value);
myFlexObject.SetFlashVars(flashVars);

Затем в Flex-объекте проверьте наличие параметров

if (Application.application.parameters.sess != null)
    sendVars.sess= Application.application.parameters.sess;
if (Application.application.parameters.auth != null)
    sendVars.au= Application.application.parameters.auth;

request.data = sendVars;
request.url = url;
request.method = URLRequestMethod.POST;

Наконец, засуньте куки в global.asax BeginRequest

if (Request.RequestType=="POST" && Request.Path.EndsWith("upload.aspx"))
{
    try
    {
        string session_param_name = "sess";
        string session_cookie_name = "ASP.NET_SESSIONID";
        string session_value = Request.Form[session_param_name]; // ?? Request.QueryString[session_param_name];
        if (session_value != null) { UpdateCookie(session_cookie_name, session_value); }
    }
    catch (Exception) { }

    try
    {
        string auth_param_name = "au";
        string auth_cookie_name = FormsAuthentication.FormsCookieName;
        string auth_value = Request.Form[auth_param_name];// ?? Request.QueryString[auth_param_name];

        if (auth_value != null) { UpdateCookie(auth_cookie_name, auth_value); }
    }
    catch (Exception) { }   

}

Надеюсь, это поможет кому-нибудь избежать 6 часов, которые я только что потратил на решение этой проблемы. Adobe закрыла проблему как неразрешимую, так что это было моим последним средством.

0
ответ дан 30 November 2019 в 23:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: