URL доступен только с мобильного - PullRequest
2 голосов
/ 02 марта 2011

У меня есть веб и мобильное приложение. В моем веб-приложении у меня есть URL-адрес www.myweb.com/mobile/update, который генерирует XML для мобильного приложения (Java-приложение, XML используется для обновления данных в этом приложении). Есть ли какой-то способ, как сделать эти URL доступными только с мобильного (Java-приложение) и ограничить его для других веб-пользователей? Я использую php и apache сервер. Спасибо за ваши советы и извините за мой английский. ;)

Ответы [ 5 ]

3 голосов
/ 02 марта 2011

На конкретной странице вам необходимо определить, является ли браузер, загружающий страницу, мобильным или нет, и, если это так, перенаправить пользователя на другую страницу.

Чтобы определить, использует ли пользователь мобильный браузер, вы можете использовать такие решения, как WURFL .


Но обратите внимание, что это сам браузерэто указывает, является ли это мобильным ... так, чтобы информация не была доверенной.

Несколько мобильных браузеров позволяют пользователю изменять User-Agent , который этоотправлено на сервер - довольно часто эта функция используется, потому что пользователь чувствует, что его выбор лучше, чем у веб-мастера (я лучше всего могу судить, хочу ли я видеть мобильный сайт или немобильный)one!)


Вообще говоря, вы должны:

  • Определить, использует ли пользователь мобильное устройство
    • Если он не является (и находится на мобильном сайте) , предложить его посетитьобычный веб-сайт
    • Если он (и находится на обычном веб-сайте) , предлагает ему посетить мобильный веб-сайт.

Но:

  • Никогда не доверяйте User-Agent.
  • И предоставьте каждому пользователю выбор.
1 голос
/ 02 марта 2011

Самое простое из возможных решений - проверка заголовка User-Agent, отправленного браузером. Тем не менее, я бы не советовал полностью ограничивать доступ со стороны немобильных пользовательских агентов, так как есть вероятность, что кто-то посетит сайт с мобильного устройства, о котором вы не знаете. Более изящным решением было бы показать пользователю краткое сообщение о том, что страница предназначена только для мобильных устройств, а также ссылку на немобильную версию и ссылку для доступа к мобильной версии в любом случае.

Некоторые строки User-Agent, отправленные мобильным браузером, можно найти здесь: http://www.zytrax.com/tech/web/mobile_ids.html

Заголовок User-Agent может быть запрошен через псевдопеременную $ _SERVER: http://php.net/manual/en/reserved.variables.server.php

Изменить после обновления вопроса:

Вероятно, вам не следует полагаться на конечную точку 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 голосов
/ 02 марта 2011

Вы также можете использовать WURLF, чтобы получить больше информации об агенте: http://wurfl.sourceforge.net/index.php (у них есть PHP API)

0 голосов
/ 02 марта 2011

То, что вы ищете, это пользовательский агент клиента.Я ничего не знаю о php, но он выглядит как $ _SERVER ['HTTP_USER_AGENT'];может помочь вам.

возможно, лучше разрешить всем мобильным пользовательским агентам вместо того, чтобы блокировать всех других пользовательских агентов, потому что в будущем будут выпущены другие браузеры, и у вас будет ошибка.например, IE9 будет выпущен через несколько недель.

Надеюсь, это помогло, ура

0 голосов
/ 02 марта 2011
<?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';
}
?>

Полную документацию для яндекс phd вы можете найти по адресу http://api.yandex.ru/detector/doc/dg/concepts/detector-request.xml (переведите ее с русского с помощью переводчика Google)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...