我有網絡和移動應用程序。在我的web應用程序上,我的url地址爲www.myweb.com/mobile/update,它爲移動應用程序生成xml(java應用程序,xml用於更新此應用程序中的數據)。有什麼方法可以使這些url只能從移動設備(java應用程序)訪問並限制其他web用戶?我正在使用PHP和Apache服務器。 感謝您的建議和對不起我的英語。 ;)只能從手機訪問的網址
回答
在你特定的頁面,你就必須檢測是否被加載頁面的瀏覽器是移動的或不移動 - 如果是,則將用戶重定向到另一個頁面。
爲了檢測用戶是否正在使用移動瀏覽器,可以使用諸如WURFL等解決方案。
但請注意,這是瀏覽器本身,它表明它是否是移動的......這樣的信息是不可信的。
幾個移動瀏覽器允許用戶更改在發送到服務器User-Agent - 很多時候,使用該功能,因爲用戶覺得自己的選擇是不是好站長的一個(我是最有條件判斷是否我想看看手機網站,或者非移動網站!)
一般來說,你應該:
- 如果用戶正在使用移動設備
- 檢測如果他不就是(並且是移動網站) ,建議他訪問正常網站
- 如果他是(並在正常網站上),建議他訪問手機網站。
但是:
- 永遠不要相信用戶代理。
- 並讓每個用戶選擇。
最簡單的可能的解決方案是檢查瀏覽器發送的用戶代理頭。不過,我不建議直接限制非移動用戶代理的訪問權限,因爲有人可能會從您不瞭解的移動設備訪問該網站。更優雅的解決方案是向用戶顯示簡短消息,即該頁面僅用於移動設備,以及指向非移動版本的鏈接以及用於訪問移動版本的鏈接。
您可以通過手機瀏覽器送到這裏,一些用戶代理字符串: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
<?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
你應該格式化你的代碼。 – JohnP 2011-03-02 11:57:28
什麼在想你要找的是客戶端的用戶代理(從俄羅斯與谷歌翻譯翻譯一下)。 我對php一無所知,但它看起來像$ _SERVER ['HTTP_USER_AGENT'];可以幫助你。
也許最好是允許所有的移動用戶代理,而不是阻止所有其他用戶代理,因爲未來其他瀏覽器goint將被釋放,你會有一個錯誤。例如IE9正在幾周內發佈。
希望它能幫助, 乾杯
您還可以使用WURLF獲取有關代理的更多相關信息:http://wurfl.sourceforge.net/index.php(他們有一個PHP API)
- 1. 只能通過QR碼訪問手機網站?
- 2. 從Android手機訪問網絡服務
- 3. 從網站訪問手機GPS數據
- 4. Flex手機訪問IOS的地址簿
- 5. 只允許訪問網站從一個特定的網址
- 6. 從手機訪問您的計算機
- 7. 訪問手機網站的手機號碼
- 8. Crawler4j只訪問網址種子
- 9. 智能手機上的Localhost訪問
- 10. kivy應用不能訪問手機上的網絡
- 11. 今天從web應用程序訪問智能手機傳感器/地址簿?
- 12. 從手機訪問ubuntu上的apache2
- 13. 網頁只能通過特定的計算機系統訪問
- 14. 從我的手機訪問網站時不使用CSS Media Queries?
- 15. 您只能從您的註冊IP地址訪問
- 16. 通過iPhone訪問手機功能SDK
- 17. 當從公共IP地址訪問網站時只能看到'welcome to nginx'
- 18. 從瀏覽器訪問手機功能的鏈接
- 19. 設計智能手機/手機網站
- 20. 只允許網站訪問通過特定的網址
- 21. 碼頭集裝箱只能訪問互聯網--net =主機
- 22. 只能訪問網站通過本地主機
- 23. 使用沒有WIFI的智能手機訪問本地主機網站
- 24. 如何訪問ASP.NET本地主機網站上的Android手機
- 25. 如何訪問網站的CMS只能訪問數據庫
- 26. 無法從網址參數訪問Laravel
- 27. 從IP地址訪問網站
- 28. 只能從本地網絡訪問請求的對象phpmyadmin
- 29. XAMPP - 訪問請求的對象只能從本地網絡
- 30. 只能從特定鏈接訪問的網頁?
感謝FOT快速回答,我更新我的詳細信息問題。移動應用程序是用java編寫的,所以用戶不會通過移動瀏覽器訪問這些網址。沒有更好的方式在java應用程序中生成一些令牌,並通過網址發送它來識別訪問是否來自這個應用程序? – 2011-03-02 12:59:13