2011-03-02 119 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正在几周内发布。

希望它能帮助, 干杯