Php 我能确定下载我的程序的用户是否真的安装了它吗?

Php 我能确定下载我的程序的用户是否真的安装了它吗?,php,cookies,Php,Cookies,我制作了一些软件,可以免费下载,希望它能继续流行。当他们向我发送流量时,我向几个附属公司支付费用,现在的工作方式是,我给每个附属公司一个唯一的链接,只有当我的软件实际下载时,附属公司才能获得积分。 然而,如果我能够跟踪用户是否实际安装了软件,那将是最理想的。是否有一些方法可以做到这一点而不需要用户注册软件?(请记住,我需要知道该用户是由哪个分支机构推荐的) 最初,我想在用户的浏览器上创建一个带有分支机构ID的cookie,然后当软件安装完成时,它会打开一个浏览器显示一个感谢页面,在这一点上,我可

我制作了一些软件,可以免费下载,希望它能继续流行。当他们向我发送流量时,我向几个附属公司支付费用,现在的工作方式是,我给每个附属公司一个唯一的链接,只有当我的软件实际下载时,附属公司才能获得积分。 然而,如果我能够跟踪用户是否实际安装了软件,那将是最理想的。是否有一些方法可以做到这一点而不需要用户注册软件?(请记住,我需要知道该用户是由哪个分支机构推荐的)

最初,我想在用户的浏览器上创建一个带有分支机构ID的cookie,然后当软件安装完成时,它会打开一个浏览器显示一个感谢页面,在这一点上,我可以阅读cookie并找出该用户与哪个分支机构绑定。但是,如果使用除用户默认浏览器以外的任何浏览器下载软件,则此功能不起作用

我的另一个想法是将用户的IP地址存储在数据库中,然后在打开“谢谢”页面时将其匹配,但如果用户是大型网络的一部分,例如在大学,这将无法很好地工作


有什么建议吗?

我敢大胆地猜测,你使用饼干的想法是最好的。用户不太可能使用默认浏览器以外的其他工具来下载软件,除非他们正在安装一台新计算机,并且尚未开始安装他们选择的浏览器


如果您不介意更改字符串并重新编译每个分支的软件,您还可以分发为每个分支打开特定链接的不同可执行文件。

您应该能够在应用程序第一次执行时将HTTP GET请求静默地发送回您的主服务器-基本上是ping返回主服务器,而且根本不打开任何浏览器。您甚至可以发送唯一的设备ID以确保这是新设备。您可能希望在本地数据库中记住此事件,而不是每次都发送此事件

请注意,要使其工作,应用程序必须具有AndroidManifest.xml中列出的权限

不过,关于隐私还有一个问题:你应该让用户清楚,你可以回家

我的另一个想法是将用户的IP地址存储在数据库中,然后在打开“谢谢”页面时将其匹配,但如果用户是大型网络的一部分,例如在大学,这将无法很好地工作

向每个用户发送带有个性化名称的安装程序(例如binary01、binary02、binary03…)。让安装程序在下载时读取自己的名称,并将其作为GET参数放入感谢页面,即
http://www.yoursite.com/thankyou?exe=binary03

服务器上的二进制文件总是相同的,只有一个文件,但下载程序会为每个分支机构报告不同的名称(或者您可以保留同一个二进制文件的多个副本,但保持同步比较困难)

例如,这可能是一个下载链接:

<?php
    // Download URL, of the form http://www.yoursite.com/download.php?aff=AffName
    // You can rewrite this with Apache's mod_rewrite and have .../filename-AffName.exe

    $affiliates = array(
        // You can keep these in a database
        "widgets"  => "Widgets'r'us",
        "foobar"   => "Foo's Software Bar",
    );

    $aff  = isset($_GET['aff']) ?  $_GET['aff'] : 'unaffiliated';
    $base = "YourBinary";
    $ext  = '.exe';

    $file = $base.$ext;
    $name = $base.'-'.$aff.$ext;

    Header("Content-Disposition: attachment; filename=" . urlencode($name));
    Header("Content-Type: application/force-download");
    Header("Content-Type: application/octet-stream");
    Header("Content-Type: application/download");
    Header("Content-Description: File Transfer");            
    Header("Content-Length: " . filesize($file));

    readfile($file);
?>

这篇文章在哪里提到了android?嗯,不知怎的,我在心里跳过了这个。但是,在家里ping是一个普遍的想法,也可以应用于其他应用程序和操作系统。实际上,我为移动应用程序找到了一些很好的解决方案……但遗憾的是,我的是一个桌面应用程序。主要问题是将用户的web会话与下载的应用程序链接。我认为lserni的答案是将信息从web传递给安装人员的最简单(唯一?)的方法。我认为这将是最有效的解决方案。唯一需要担心的是用户更改名称…但这并不常见…是吗?“千载难逢”似乎很合适:-)我实际上看到不少人不更改默认浏览器(ie),只是在桌面上有一个chrome/firefox快捷方式:/