2012-02-02 67 views
7

这是一个ColdFusion /移动问题。我有一个简单的Web应用程序和一个登录页面。 用户键入他们的登录信息,会话信息被分配,并且他们被带到 项目页面。这可以正常工作,但是当我尝试设置自动登录(用户 在其主屏幕上单击通过用户名和密码的书签)时,应该发生相同的过程,但会话信息一旦被带到 项目页面。这发生在黑莓9370(带触摸屏,不是 ),但在浏览器和黑莓模拟器中测试时效果不错。下面是自动登录一些代码:BlackBerry上丢失的会话信息(ColdFusion应用程序)

<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再直接和短期仍然想出了。有任何想法吗?

+0

我想知道如果您手动将标记添加到URL中会发生什么情况。 – 2012-02-02 18:24:26

回答

1

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

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

1

在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实际上清除了你的会话cookie,那么request.headers.cookie将不会在那里,并且会给出新的会话标识符。

+0

这也适用于Android和iPhone设备吗? – Whatevo 2012-02-07 18:01:42

+0

@Joshua,从主屏幕启动时,我们看到了iPhone上的这种行为。我没有在Android上测试过。 – jalpino 2012-02-07 23:55:10

+0

iPhone或Android没有问题。在BlackBerry OS的更高版本中也没有问题。我相信它是7,但是下面的任何东西都有问题。 – Whatevo 2012-08-14 16:24:11

1

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

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

为了重定向起作用,您需要这两个标记。我建议在最后添加一个CFABORT以模仿CFLOCATION也停止当前页面执行的方式。