如何在PHP中区分HTTP上的请求与Web浏览器或移动设备(app)?

时间:2013-12-17 15:26:58

标签: php android ios iphone mobile

我正在开发网站和移动(iPhone / iPad,Android)应用程序版本 网站和移动应用访问相同的网址。例如http://xxx.xxx.xxx/register.php
因此,正如您所知,在移动应用上,PHP没有SESSION概念 因此,我需要区分对单个URL上的任何请求的Web浏览器请求或应用程序请求移动设备的内容 注意!!!!使用USER AGENT属性来区分移动Web浏览器不是问题 如何区分请求来自浏览器(PC /移动浏览器)的请求?或从移动应用程序?
而且,我希望在请求时不要使用$ _GET []变量来解决这个问题 请帮帮我
亲切的问候

3 个答案:

答案 0 :(得分:1)

您可以使用用户代理字符串来区分不同的浏览器和应用。在PHP中,您可以通过$_SERVER['HTTP_USER_AGENT']检索它。

答案 1 :(得分:0)

我认为你在这里弄错了几件事。会话仅仅是基于cookie的工件,但不是将原始数据发送到客户端PHP中的PHP,只需发送一个ID。

您可以将PHP设置为通过GET处理会话,但您的应用必须处理此问题。您可以为移动应用和普通用户提供不同的端点。您也可以(在大多数环境中)将用户代理设置为PHP应用程序可以处理的内容。

无论如何,如果您未在移动应用中实施COOKIES(或相关会话),则必须使用自定义标题,GET或POST。

答案 2 :(得分:0)

你的方式错了。有支持会话的移动浏览器以及禁用会话的桌面浏览器。要检测移动浏览器,唯一的方法是使用用户代理字符串,但这可以很容易地修改。更好的解决方案是实际检测是否启用了会话。你可以用JavaScript做到这一点。在主PHP脚本中启动会话并设置某种变量:

session_start();
$_SESSION['var'] = "test";

然后你可以发送一个AJAX请求来查看它是否真的开始了。这是一个jQuery示例:

var session_check = $.ajax({
    url: "/ajax-check-session.php",
    type: "get"
});

var sessions = true;
session_check.done(function (session_response, textStatus, jqXHR){
    if (session_response != "enabled") {
        sessions = false;
    }

    if (sessions == false) {
        // sessions are disabled
    }
    else {
        // sessions are enabled
    }
});

和ajax-check-session.php:

session_start();
if (count($_SESSION) == 0) {
    echo "Sessions are disabled";
}
echo "enabled";

但是请记住,有意识地禁用会话的人中有很大一部分也故意禁用了javascript。如果您决定使JS成为必要(这通常是一个坏主意),您可以使用<noscript>标记处理此问题,告诉人们他们需要启用JS才能使用您的网站,然后当他们启用JS时,你可以处理禁用的会话。