【问题标题】:Session info lost on BlackBerry (ColdFusion app)BlackBerry 上的会话信息丢失(ColdFusion 应用程序)
【发布时间】:2012-02-02 17:02:12
【问题描述】:

这是一个 ColdFusion/移动问题。我有一个带有登录页面的简单网络应用程序。 用户键入他们的登录信息,分配会话信息,然后将他们带到 项目页面。这工作正常,但是当我尝试设置自动登录时(用户 单击其主屏幕上传递用户名和密码的书签), 应该发生相同的过程,但会话信息一旦被带到 项目页面。这发生在 BlackBerry 9370(带触摸屏。不是 确定模型类型),但在浏览器和 黑莓模拟器。下面是一些自动登录的代码:

<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>

我读到在分配会话变量后立即使用 &lt;cflocation&gt; 可能会导致 一个问题,所以我尝试了 JavaScript 重定向,但仍然很短。有任何想法吗?

【问题讨论】:

  • 我想知道如果您手动将令牌附加到 URL 会发生什么。

标签: blackberry coldfusion jquery-mobile


【解决方案1】:

我不禁认为这可能是 BB 浏览器中的一个错误,一开始就很糟糕(IMO 它使 IE6 看起来可用)。

为了测试,将 cflocation 删除到项目页面并在那里放置一个可点击的链接是否可行?我只是想看看它是否可以这样工作。如果确实如此,那么由于某种原因,cflocation 会导致会话丢失。由于您使用的是 CF9,因此情况不应该如此,但最好以一种或另一种方式证明。

【讨论】:

    【解决方案2】:

    在 CF7 之后,Adobe 修复了在与 &lt;cflocation&gt; 标记相同的请求中设置会话变量的问题。这不再是问题。

    会话退出的可能原因是 BlackBerry 在从主屏幕书签启动浏览器时清除了会话 cookie(cfid、cftoken 或 jsessionid)。我在 iPhone 中也看到了同样的行为,BB 可能也在这样做。

    要确认(或否认)是这种情况,请设置一个简单的页面,输出:

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

    通过手动键入 URL,以“正常”方式导航到您的 BB 上的此页面。页面第一次加载时,它将创建一个会话(并发送回相关的会话 cookie)。重新加载页面,您将在 http 请求数据转储中看到一个名为 cookie(request.headers.cookie) 的标头。这将包含您在上面的会话转储中看到的相同会话信息。

    现在,使用主屏幕书签加载页面。如果 BB 实际上正在清除您的会话 cookie,那么 request.headers.cookie 将不存在,并且将给出新的会话标识符。

    【讨论】:

    • 这是否也适用于 Android 和 iPhone 设备?
    • @Joshua,我们在 iPhone 上从主屏幕启动时看到了这种行为。我还没有在 Android 上测试过。
    • 在 iPhone 或 Android 上没有问题。在更高版本的黑莓操作系统上也没有问题。我相信它是 7,但下面的任何东西都有问题。
    【解决方案3】:

    您是否已经尝试过使用 CFHEADER 标签而不是 cflocation 进行重定向?示例:

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

    您需要这两个标签才能使重定向起作用。我建议在最后添加一个 CFABORT 来模仿 CFLOCATION 也停止当前页面执行的方式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-15
      • 1970-01-01
      • 1970-01-01
      • 2021-05-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多