2011-06-03 48 views
1

有一個用PHP編寫的現有網站。最初只有網站存在,但現在正在構建一個Android應用程序,可以從重新使用某些PHP邏輯中受益。根據PHP中的請求返回HTML或XML

PHP網站的結構使得有許多頁面執行一個動作,在$_SESSION中設置成功/錯誤信息,然後重定向到一個可視化頁面,而不需要自己輸出任何內容。例如,有action_login.php

頁面接受用戶名和密碼(來自GET或POST變量),驗證憑證,在$ _SESSION中設置成功/失敗消息,然後在成功時重定向到登錄的主頁或回到登錄屏幕失敗。我們稱這種行爲爲「HTML迴應」。

Android應用程序需要調用相同的頁面,但不知何故告訴它它需要一個「XML響應」。當頁面檢測到這個時,它將以XML格式輸出成功/錯誤消息,而不是將它們放入$_SESSION不會重定向。無論如何,這是主意。這有助於防止重複的代碼。我不想讓action_login.phpaction_login.xml.php浮動。

我讀過Accept Header不夠可靠(請參閱:Unacceptable Browser HTTP Accept Headers (Yes, You Safari and Internet Explorer))。我的備用解決方案是POST xml=1或使用{url}?xml=1進行GET請求。有沒有更好的辦法?

沒有框架被使用,這是普通的PHP。

回答

2

這就是Accept Header的用途。讓Android以application/xml的形式請求頁面,然後檢查腳本中的請求。在使用Apache時,您可能也對mod_negotiation感興趣。或者使用WURFL來檢測UserAgent,並在Android時用作XML。

+0

...這可能會對android應用程序很好。我害怕的是不正確的瀏覽器,它們沒有正確使用標題並導致用戶看到一個xml文檔,而不是登錄主頁。 – colithium 2011-06-03 07:39:33

+0

@colithium好,格式錯誤的請求是格式錯誤的請求。我能想到的另一個選擇是使用WURFL來檢測用戶代理。 – Gordon 2011-06-03 07:41:18

+0

我添加了一個鏈接,說明WebKit做什麼,我害怕 – colithium 2011-06-03 07:44:32

1

爲什麼不爲應用程序設置一個特定的會話,然後僅在會話建立的東西沿着

$_SESSION['app'] = "andriod app"; 

if ($_SESSION['app'] == "andriod app") { 
    header.. 

真的不知道如何實現這一行成一個應用程序,因爲我已經設置頁眉做了真正的應用程序的小工作,但希望這可以幫助你的思維過程

2

我會去與Android應用程序發送一個cookie的每一個請求(真的,我寧願Accept頭,但與你指出的問題與webkit我瞭解你不願意這樣做)。該cookie簡化了代碼服務器端,不必檢查$ _GET ['xml']或$ _POST ['xml'],並且如果某個android用戶共享您的應用程序的URL並且它具有?xml = 1,在計算機瀏覽器中打開此文件的用戶將接收XML而不是正常的Web輸出。

我不會依賴於$ _SESSION移動應用程序,因爲在移動平臺上的用戶(或者至少我這樣做)傾向於打開你的應用程序,玩5分鐘,把手機放在口袋裏,2小時後返回到你的應用程序。你想設置會話的生命期如此長嗎?