Информация о сеансе теряется в BlackBerry (приложение ColdFusion) - PullRequest
7 голосов
/ 02 февраля 2012

Это вопрос ColdFusion / mobile.У меня есть простое веб-приложение со страницей входа.Пользователь вводит свои данные для входа в систему, назначается информация о сеансе, и они переносятся на страницу проектов.Это работает нормально, но когда я пытаюсь настроить автоматический вход в систему (пользователь нажимает на закладку на своем домашнем экране, которая передает имя пользователя и пароль), тот же процесс должен произойти, но информация о сеансе теряется, как только они попадают в проектыстр.Это происходит на BlackBerry 9370 (с сенсорным экраном. Не уверен в типе модели), но отлично работает при тестировании в браузере и на симуляторе BlackBerry.Вот некоторый код для автоматического входа в систему:

<cfquery name="qryAccount">
    EXEC m_AccountLogin
            @Username = <cfqueryparam value="#LCase(url.u)#" cfsqltype="cf_sql_varchar">,
            @Password = <cfqueryparam value="#LCase(url.p)#" cfsqltype="cf_sql_varchar">;
</cfquery>

<cfif qryAccount.recordcount>
    <cflock name="lockAccount" type="exclusive" timeout="10">
        <cfset session.account = {
                isLoggedIn = true,
                MemberID   = qryAccount.iMemberID,
                Role       = qryAccount.iRole }>
    </cflock>

   <cflocation url="/mobile/home/projects.cfm" addtoken="true">
<cfelse>
    <cflocation url="/mobile/index.cfm" addtoken="true">
</cfif>

Я прочитал, что использование <cflocation> сразу после назначения сессий может вызвать проблему, поэтому я попытался перенаправить JavaScript и все еще не получилось.Есть идеи?

Ответы [ 3 ]

1 голос
/ 07 февраля 2012

После CF7 Adobe исправила проблему установки переменных сеанса в том же запросе, что и тег <cflocation>. Это больше не проблема.

Вероятной причиной прекращения сеанса является то, что BlackBerry удаляет файлы cookie сеанса (cfid, cftoken или jsessionid), когда он запускает браузер из закладки на главном экране. Я видел такое же поведение в iPhone, возможно, что BB тоже делает это.

Чтобы подтвердить (или опровергнуть), что это так, настройте простую страницу с выводом:

<cfdump var="#session#">
<cfdump var="#getHttpRequestData()#">

Перейдите на эту страницу на вашем BB «обычным» способом, введя URL-адрес вручную. При первой загрузке страницы она создает сеанс (и отправляет обратно связанные файлы cookie сеанса). Перезагрузите страницу, и вы увидите в дампе http-запроса заголовок cookie (request.headers.cookie). Он будет содержать ту же информацию о сеансе, что вы видите в дампе сеанса над ним.

Теперь используйте закладку главного экрана, чтобы загрузить страницу. Если BB на самом деле удаляет ваши сеансовые куки, то request.headers.cookie там не будет и будут даны новые идентификаторы сеанса.

1 голос
/ 14 августа 2012

Вы уже пытались использовать теги CFHEADER для перенаправления вместо cflocation?Пример:

<CFHEADER STATUSCODE="302" STATUSTEXT="Object Temporarily Moved">
<CFHEADER NAME="location" VALUE="/mobile/home/projects.cfm">

Вам нужны оба этих тега, чтобы редирект работал.Я предлагаю также добавить CFABORT в конце, чтобы имитировать способ, которым CFLOCATION также останавливает выполнение текущей страницы.

1 голос
/ 03 февраля 2012

Не могу удержаться, но думаю, что это может быть ошибка в браузере BB, что довольно нехорошо для начала (IMO делает IE6 похожим на юзабилити).

Ради тестирования, правда?практично удалить cflocation на страницу проектов и поставить вместо нее ссылку, по которой можно кликнуть?Я просто хотел бы увидеть, работает ли это таким образом.Если это так, то по какой-то причине cflocation приводит к потере сеанса.Этого не должно быть, поскольку вы находитесь на CF9, но было бы неплохо доказать это так или иначе.

...