【问题标题】:How can distinguish the request on HTTP from web browser or mobile device(app) in PHP?如何在 PHP 中区分来自 Web 浏览器或移动设备(应用程序)的 HTTP 请求?
【发布时间】:2013-12-17 15:26:57
【问题描述】:

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

亲切的问候

【问题讨论】:

  • 亲爱的,谢谢,我当然可以使用 USER AGENT 属性,但这是移动浏览器和 PC 浏览器的值。即仅适用于网络浏览器。但我需要区分浏览器或移动应用程序。
  • 让移动应用发出post 请求,而浏览器发出get 数据请求

标签: php android ios iphone mobile


【解决方案1】:

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

【讨论】:

  • 亲爱的,谢谢,我当然可以使用 USER AGENT 属性,但这是移动浏览器和 PC 浏览器的值。即仅适用于网络浏览器。但我需要区分浏览器或移动应用程序。
  • 不正确。用户代理仅限于浏览器。它只是一个 HTTP 标头,因此 any 应用程序可以发送它。对于 iOS 应用程序,使用 NSURLRequest 发出的 HTTP 请求具有用户代理字符串。默认情况下,它看起来像这样:<BundleName>/<AppVersion> CFNetwork/609.1.4 Darwin/12.4.0 如果您愿意,您甚至可以更改它。
  • 真的吗?那你能不能区分一下..我只需要分析浏览器或移动应用程序吗?
  • @neilco 我真的不熟悉应用程序开发,但是在特定应用程序中创建NSURLRequest 并使用内置网络浏览器时,用户代理是否会发生变化?在安卓上呢?应用程序是否发送不同于 Android 浏览器的特定用户代理?我假设如果应用程序可以呈现 HTML,它们可能会打开一个新的 Web 浏览器进程并使用相同(或相似)的用户代理字符串。
  • @Mike Mobile Safari 有自己的用户代理,UIWebView(用于创建应用内浏览器)有自己的用户代理,使用 NSURLRequest 发出的编程请求有自己的用户代理(尽管开发人员可以修改)。我不是 Android 开发者,所以我不会回答任何关于 Android 的问题。
【解决方案2】:

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

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

无论如何,如果您没有在移动应用程序中实现 COOKIES(或与此相关的会话),您将不得不使用自定义标头、GET 或 POST。

【讨论】:

  • 亲爱的,谢谢,我当然可以使用 USER AGENT 属性,但这是移动浏览器和 PC 浏览器的值。即仅适用于网络浏览器。但我需要区分浏览器或移动应用程序。
  • 但是您可以设置一个用户代理,例如“myappuseragent”,它将针对其他浏览器识别您的应用。但是要在您的应用中识别用户,您应该使用会话/令牌而不是 cookie 或 GET。
【解决方案3】:

你走错路了。有两种移动浏览器确实支持会话以及禁用会话的桌面浏览器。要检测移动浏览器,唯一的方法是使用用户代理字符串,但是这可以很容易地修改。更好的解决方案是实际检测是否启用了会话。你可以用 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 时,你可以处理禁用的会话。

【讨论】:

  • 亲爱的,谢谢,我当然可以使用 USER AGENT 属性,但这是移动浏览器和 PC 浏览器的值。即仅适用于网络浏览器。但我需要区分浏览器或移动应用程序。
  • 为什么要检测移动设备或桌面设备?你说这是因为移动浏览器不支持会话 cookie,但我告诉你这是一个错误的假设。
  • 我说:在移动应用上,PHP 没有 SESSION 概念。它是 [apps],而不是 [browser]
  • 他们支持 JavaScript 吗?
猜你喜欢
  • 1970-01-01
  • 2013-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-06
  • 2010-09-13
  • 1970-01-01
相关资源
最近更新 更多