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