网址只能通过手机访问

时间:2011-03-02 11:43:53

标签: php url mobile

我有网络和移动应用程序。在我的Web应用程序上,我有url地址www.myweb.com/mobile/update,它为移动应用程序生成xml(java应用程序,xml用于更新此应用程序中的数据)。有一些方法如何使这些网址只能从移动(Java应用程序)访问,并限制其他网络用户?我正在使用php和apache服务器。 谢谢你的建议和抱歉形成我的英语。 ;)

5 个答案:

答案 0 :(得分:3)

在您的特定页面上,您必须检测正在加载该页面的浏览器是否是移动页面 - 如果是,则将用户重定向到另一页面。

为了检测用户是否使用移动浏览器,您可以使用WURFL等解决方案。


但请注意,它是浏览器本身,表明它是否是移动的...所以信息不可信。

多个移动浏览器允许用户更改发送到服务器的User-Agent - 经常使用该功能,因为用户认为他的选择比网站管理员的更好(我是最好判断我是想看移动网站还是非移动网站!)


一般来说,你应该:

  • 检测用户是否正在使用移动设备
    • 如果他不是(并且在移动网站上)建议他访问普通网站
    • 如果他(并且在正常网站上)建议他访问移动网站。

但是:

  • 永远不要相信用户代理。
  • 让每个用户都可以选择。

答案 1 :(得分:1)

最简单的解决方案是检查浏览器发送的User-Agent标头。但是,我不建议直接限制非移动用户代理的任何访问,因为有人可能会从您不知道的移动设备访问该网站。一个更优雅的解决方案是向用户显示一条简短的消息,该页面仅适用于移动设备,以及非移动版本的链接和访问移动版本的链接。

您可以在此处找到移动浏览器发送的一些用户代理字符串:http://www.zytrax.com/tech/web/mobile_ids.html

可以通过$ _SERVER伪变量查询User-Agent标头:http://php.net/manual/en/reserved.variables.server.php

更新问题后

编辑:

可能您不应该仅依赖从您的app访问的url端点。限制访问的一种方法是将应用程序配置为发送特定标头,这可能是,事实上,如果有人真正想要它,将在某天从您的应用程序中提取。可能是自定义用户代理字符串和自定义标头(如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

答案 2 :(得分: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 phd的完整文档,你可以在http://api.yandex.ru/detector/doc/dg/concepts/detector-request.xml找到(用谷歌翻译从俄语翻译)

答案 3 :(得分:0)

您认为正在寻找的是客户的用户代理。 我对php一无所知,但它看起来像$ _SERVER ['HTTP_USER_AGENT'];可以帮到你。

也许最好允许所有移动用户代理而不是阻止所有其他用户代理,因为将来其他浏览器都会被发布并且你会有一个bug。例如,IE9将在几周内发布。

希望它有所帮助, 干杯

答案 4 :(得分:0)

您还可以使用WURLF获取有关代理的更多信息:http://wurfl.sourceforge.net/index.php(他们有PHP api)