2012-02-02 68 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也停止當前頁面執行的方式。