BlackBerry上的会话信息丢失(ColdFusion应用程序)

这是一个ColdFusion /移动问题。 我有一个简单的Web应用程序和一个登录页面。 用户键入他们的登录信息,会话信息被分配,并且他们被带到项目页面。 这工作正常,但是当我尝试设置自动登录(用户单击其主屏幕上传递用户名和密码的书签)时,应该发生相同的过程,但会话信息一旦被带到项目中就会丢失页。 这发生在黑莓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>

我在读取会话变量后使用<cflocation>可能会导致一个问题,所以我尝试了一个JavaScript <cflocation> ,但仍然存在。 有任何想法吗?


我不禁想到这可能是BB浏览器中的一个错误,这是一个非常蹩脚的开始(IMO使IE6看起来可用)。

为了测试,将cflocation移除到项目页面并在其中放置可点击的链接是否可行? 我只想看看它是如何工作的。 如果是这样,那么出于某种原因,cflocation会导致会话丢失。 从CF9开始,情况就不是这样了,但是证明这种或那种方式会很好。


在CF7之后,Adobe将相同请求中的会话变量设置为<cflocation>标签。 这不再是一个问题。

会议退出的可能原因是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将不会在那里,并且会给出新的会话标识符。


你已经尝试使用CFHEADER标签重定向而不是cflocation? 例:

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

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

链接地址: http://www.djcxy.com/p/10383.html

上一篇: Session info lost on BlackBerry (ColdFusion app)

下一篇: Safari for Ipad not reporting line numbers on Javascript errors