我有网络和移动应用程序。在我的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. 从网站访问手机GPS数据
- 3. 只允许访问网站从一个特定的网址
- 4. 从手机访问您的计算机
- 5. 访问手机网站的手机号码
- 6. 智能手机上的Localhost访问
- 7. kivy应用不能访问手机上的网络
- 8. 今天从web应用程序访问智能手机传感器/地址簿?
- 9. 网页只能通过特定的计算机系统访问
- 10. 从我的手机访问网站时不使用CSS Media Queries?
- 11. 您只能从您的注册IP地址访问
- 12. 通过iPhone访问手机功能SDK
- 13. 设计智能手机/手机网站
- 14. 只能访问网站通过本地主机
- 15. 使用没有WIFI的智能手机访问本地主机网站
- 16. 如何访问ASP.NET本地主机网站上的Android手机
- 17. XAMPP - 访问请求的对象只能从本地网络
- 18. 只能从本地网络访问请求的对象phpmyadmin
- 19. 如何授权访问ios 10.0中的手机地址簿?
- 20. 访问在Android手机
- 21. 只制作基于手机的网站
- 22. 如何从我的Android手机访问我的本地主机
- 23. 只能从本地主机访问Hadoop作业跟踪器
- 24. 访问网站的网址太多了
- 25. jQuery手机弹出式动态网址
- 26. 手机网站问题
- 27. 陆续访问网址
- 28. 无法访问Namenode网址
- 29. 如何访问网址
- 30. 限制只能从局域网访问服务器
感谢FOT快速回答,我更新我的详细信息问题。移动应用程序是用java编写的,所以用户不会通过移动浏览器访问这些网址。没有更好的方式在java应用程序中生成一些令牌,并通过网址发送它来识别访问是否来自这个应用程序? – 2011-03-02 12:59:13