После преобразования куки только в HTTP, IE удаляет сессии после перенаправления из iFrame - PullRequest
0 голосов
/ 10 октября 2011

Да, это должно быть весело.

Я работаю над сайтом, который был построен в Fusebox 5.5 и использует iFrame.Недавно мне было поручено преобразовать сайт в Application.cfc и настроить файлы cookie, которые мы используем для индексации Google на сайте, только по HTTP, как описано здесь: http://www.petefreitag.com/item/764.cfm. Приложение работает на CF8.

Проблема, с которой я сталкиваюсь, заключается в том, что после входа пользователя на сайт данные сеанса устанавливаются после процесса входа в систему, после чего срабатывает предохранитель для загрузки домашней страницы, которая содержит функцию 'frame-buster', чтобы вывести сайт из строя.внутренний фрейм для входа и загрузки главной страницы.Когда это выполняется, IE отбрасывает сеанс и по мере загрузки остальной части страницы происходит другая проверка, которая обнаруживает, что сеанс отсутствует, и принудительно перенаправляет обратно на домашнюю страницу.Каждое перенаправление JavaScript создает новый сеанс при использовании в IE.Эта проблема не возникает в Firefox или Chrome.

Это функция frame-buster, запускаемая как onLoad в теге body:

    function changeParentLocation() 
{
    if (top != self) {
        self.location.href = <cfoutput>"#Application.rootdir#"</cfoutput>;
        top.location.replace(self.location.href);
    }
}

Это функция onSessionStart:

<cffunction name='onSessionStart' access='public' returntype='void' output='false'>
    <cfheader name="P3P" value="CP='IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT'" />
    <cfheader name="Set-Cookie" value="CFTOKEN=#session.CFTOKEN#;path=.my.sites.subdomain/;HTTPOnly">
    <cfheader name="Set-Cookie" value="CFID=#session.CFID#;path=.my.sites.subdomain/;HTTPOnly">

    <!---<cfcookie name="CFTOKEN" domain=".my.sites.subdomain" value="#Session.CFTOKEN#" />
    <cfcookie name="CFID" domain=".my.sites.subdomain" value="#Session.CFID#" />--->
</cffunction>

Если я закомментирую файлы cookie HTTPOnly и использую вместо этого закомментированный код CFCookie, IE не пытается создать несколько сеансов.

1 Ответ

1 голос
/ 10 октября 2011

Этого не происходит, если вы правильно настроили приложение Coldfusion, чтобы setClientCookies было ложным На самом деле это должно быть логическое значение false, а не текстовое значение, которое в противном случае переводилось бы в false. Другими словами:

<cfscript>
    this.name = applicationname;
    this.sessionmanagement = true;
    this.sessiontimeout = '#CreateTimeSpan(0,12,0,0)#';
    this.clientmanagement = true;
    this.setClientCookies = false;
    FUSEBOX_APPLICATION_PATH = '';
</cfscript>

Работает. Но:

<cfscript>
    this.name = applicationname;
    this.sessionmanagement = 'true';
    this.sessiontimeout = '#CreateTimeSpan(0,12,0,0)#';
    this.clientmanagement = 'true';
    this.setClientCookies = 'false';
    this.specChar = '[!|@|##|$|%|^|&|*|<|>|?|\|/|[|]|{|}|=|~|`|(|)]';
    FUSEBOX_APPLICATION_PATH = '';
</cfscript>

Нет.

...