2012-02-02 11 views
7

Đây là câu hỏi về ColdFusion/di động. Tôi có một ứng dụng web đơn giản với trang đăng nhập. Loại người dùng thông tin đăng nhập của họ, thông tin phiên được chỉ định và chúng được đưa đến trang dự án . Điều này hoạt động tốt, nhưng khi tôi cố gắng thiết lập tự động đăng nhập (người dùng nhấp vào dấu trang trên màn hình chính của họ chuyển tên người dùng và mật khẩu), quá trình tương tự sẽ xảy ra, nhưng thông tin phiên bị mất khi chúng được đưa đến trang dự án. Điều này xảy ra trên BlackBerry 9370 (màn hình w/touch. Không phải chắc chắn về kiểu máy), nhưng hoạt động tốt khi thử nghiệm nó trong trình duyệt và trình mô phỏng BlackBerry . Dưới đây là một số mã để đăng nhập tự động:Thông tin phiên bị mất trên BlackBerry (ứng dụng 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> 

tôi đọc rằng việc sử dụng <cflocation> ngay sau khi giao vars phiên có thể gây một vấn đề, vì vậy tôi đã thử một Javascript tái trực tiếp và vẫn đã đưa ra ngắn. Ý tưởng nào?

+0

Tôi tự hỏi điều gì sẽ xảy ra nếu bạn thêm thủ công mã thông báo vào URL. –

Trả lời

1

Tôi không thể không nghĩ rằng đây có thể là một lỗi trong trình duyệt BB, điều này khá lame để bắt đầu (IMO nó làm cho IE6 có thể sử dụng được).

Vì mục đích thử nghiệm, thực tế là bạn có thể xóa trang web cflocation thành trang dự án và đặt liên kết có thể nhấp vào đó không? Tôi chỉ muốn xem nếu nó hoạt động theo cách đó. Nếu có, thì vì một lý do nào đó, cflocation đang khiến phiên bị mất. Đó không phải là trường hợp kể từ khi bạn đang ở trên CF9, nhưng nó sẽ được tốt đẹp để chứng minh một cách này hay cách khác.

1

Sau CF7, Adobe đã khắc phục vấn đề đặt biến phiên trong cùng một yêu cầu dưới dạng thẻ <cflocation>. Đây không còn là vấn đề nữa.

Nguyên nhân có thể khiến phiên của bạn rơi ra là BlackBerry đang xóa cookie phiên của bạn (cfid, cftoken hoặc jsessionid) khi khởi chạy trình duyệt từ một dấu trang chủ. Tôi đã thấy hành vi tương tự này trong iPhone là tốt, có thể là BB cũng đang làm điều đó.

Để xác nhận (hoặc từ chối) rằng đây là trường hợp, thiết lập một trang đơn giản mà kết quả đầu ra:

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

Navigate to trang này trên BB của bạn "bình thường" cách bởi keying trong URL bằng tay. Lần đầu tiên trang tải, nó sẽ tạo một phiên (và gửi lại (các) cookie phiên liên quan). Tải lại trang và bạn sẽ thấy trong bãi chứa dữ liệu yêu cầu http, một tiêu đề được gọi là cookie (request.headers.cookie). Điều này sẽ chứa thông tin phiên tương tự mà bạn thấy trong phiên kết xuất trên nó.

Bây giờ, hãy sử dụng dấu trang trên màn hình chính để tải trang lên. Nếu BB thực tế là xóa cookie phiên của bạn, thì request.headers.cookie sẽ không có ở đó và các số nhận dạng phiên mới sẽ được cung cấp.

+0

Điều này cũng sẽ áp dụng cho các thiết bị Android và iPhone? – Whatevo

+0

@Joshua, chúng tôi đã thấy hành vi này trên iPhone khi khởi chạy từ màn hình chính. Tôi chưa thử nghiệm trên Android. – jalpino

+0

Không có sự cố trên iPhone hoặc Android.Cũng không có vấn đề gì với phiên bản sau của BlackBerry OS. Tôi tin rằng đó là 7, nhưng bất cứ điều gì dưới đây có vấn đề. – Whatevo

1

Bạn đã thử sử dụng thẻ CFHEADER để chuyển hướng thay vì cflocation? Ví dụ:

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

Bạn cần cả hai thẻ này để chuyển hướng hoạt động. Tôi cũng khuyên bạn nên thêm CFABORT vào cuối để bắt chước cách CFLOCATION cũng ngừng thực thi trang hiện tại.