2011-03-02 120 views
2

我有網絡和移動應用程序。在我的web應用程序上,我的url地址爲www.myweb.com/mobile/update,它爲移動應用程序生成xml(java應用程序,xml用於更新此應用程序中的數據)。有什麼方法可以使這些url只能從移動設備(java應用程序)訪問並限制其他web用戶?我正在使用PHP和Apache服務器。 感謝您的建議和對不起我的英語。 ;)只能從手機訪問的網址

回答

3

在你特定的頁面,你就必須檢測是否被加載頁面的瀏覽器是移動的或不移動 - 如果是,則將用戶重定向到另一個頁面。

爲了檢測用戶是否正在使用移動瀏覽器,可以使用諸如WURFL等解決方案。


但請注意,這是瀏覽器本身,它表明它是否是移動的......這樣的信息是不可信的。

幾個移動瀏覽器允許用戶更改在發送到服務器User-Agent - 很多時候,使用該功能,因爲用戶覺得自己的選擇是不是好站長的一個(我是最有條件判斷是否我想看看手機網站,或者非移動網站!)


一般來說,你應該:

  • 如果用戶正在使用移動設備
    • 檢測如果他不就是(並且是移動網站)建議他訪問正常網站
    • 如果他是(並在正常網站上),建議他訪問手機網站。

但是:

  • 永遠不要相信用戶代理。
  • 並讓每個用戶選擇。
+0

感謝FOT快速回答,我更新我的詳細信息問題。移動應用程序是用java編寫的,所以用戶不會通過移動瀏覽器訪問這些網址。沒有更好的方式在java應用程序中生成一些令牌,並通過網址發送它來識別訪問是否來自這個應用程序? – 2011-03-02 12:59:13

1

最簡單的可能的解決方案是檢查瀏覽器發送的用戶代理頭。不過,我不建議直接限制非移動用戶代理的訪問權限,因爲有人可能會從您不瞭解的移動設備訪問該網站。更優雅的解決方案是向用戶顯示簡短消息,即該頁面僅用於移動設備,以及指向非移動版本的鏈接以及用於訪問移動版本的鏈接。

您可以通過手機瀏覽器送到這裏,一些用戶代理字符串:http://www.zytrax.com/tech/web/mobile_ids.html

User-Agent頭可以通過$ _ SERVER查詢僞變量:http://php.net/manual/en/reserved.variables.server.php

問題的更新後編輯:

也許你不應該僅僅依靠從你app中訪問的url端點。限制訪問的一種方法是配置你的應用程序發送一個特定的頭部,事實上,如果有人真正想要它,那麼有一天它會從你的應用中提取出來。可能是自定義User-Agent字符串和自定義標題(如X-My-App-Name(創建一些智能名稱))的組合足以滿足大多數實際需要。服務器可以讀取這些標題,如果它們不存在,請沿應用程序下載鏈接向用戶顯示警告。

自定義頭文件應該如何發送,這在很大程度上取決於您開發的平臺。例如,如果包org.apache.http.clint可用(例如,在Android上),那麼方法org.apache.http.HttpMessage.addHeader(String name,String value)是最簡單的方法。

上org.apache.http.clint有些文檔是可用的,例如,在這裏:http://developer.android.com/reference/org/apache/http/HttpMessage.html

0
<?php 

$headers = ''; 

foreach ($_SERVER as $key => $value) { 
    if (strpos($key, 'HTTP_') === 0 && $key != 'HTTP_HOST' && $key != 'HTTP_CONNECTION') { 
     $key = strtolower(strtr(substr($key, 5), '_', '-')); 
     $headers .= $key . ': ' . $value . "\r\n"; 
    } 
} 

$opts = array(
'http'=>array(
    'method'=>"GET", 
    'header'=> $headers, 
) 
); 

$data = file_get_contents('http://phd.yandex.net/detect', false, stream_context_create($opts)); 
if($data != '<yandex-mobile-info-error>Unknown user agent and wap profile</yandex-mobile-info-error>') 
{ 
    //your code 
} 
else 
{ 
    echo 'these url accesible only from mobile'; 
} 
?> 

對Yandex的博士的完整文檔,你可以找到在http://api.yandex.ru/detector/doc/dg/concepts/detector-request.xml

+0

你應該格式化你的代碼。 – JohnP 2011-03-02 11:57:28

0

什麼在想你要找的是客戶端的用戶代理(從俄羅斯與谷歌翻譯翻譯一下)。 我對php一無所知,但它看起來像$ _SERVER ['HTTP_USER_AGENT'];可以幫助你。

也許最好是允許所有的移動用戶代理,而不是阻止所有其他用戶代理,因爲未來其他瀏覽器goint將被釋放,你會有一個錯誤。例如IE9正在幾周內發佈。

希望它能幫助, 乾杯