一次下载喜欢在php


One time download liks in php?

我试图在php中创建一个一次性下载链接,因为我的客户想在他们的网站上出售巴士旅行票。我是一个乞丐/从来没有真正写过我自己的php,我试图创建一个一次性下载链接的门票。问题是凭证也是由php动态创建的,并且变量存储在链接中,否则我可以使用cms的内置函数。但是,我想创建一个页面的一次性链接,将人们重定向到具有重定向的页面。

如果有人可以概述创建一次性链接的过程,将非常感激,如果有人可以提供一些示例代码,将是伟大的。

谢谢你,托马斯。

轮廓如下:

  • 生成唯一ID -可以使用
  • 插入数据库
  • 以某种方式向使用该ID的用户发送链接,如/download/{ID}
  • 当用户进入链接时,在数据库中注册它已被使用

然后确保您的下载脚本检查id是否以前使用过

您需要在数据库中存储某种标识符,并在访问后将其删除。所以它是这样工作的:

  • 用户购买产品,脚本在数据库
  • 中创建一个新表
  • Person下载产品,脚本删除

在不详细了解您的环境的情况下,这里有一个流程的总体概念,以及数据层的一些示例思想。

你的票的表结构应该是这样的:

  • id -主键
  • transaction_id—应该是另一个表的数字id,您可以在其中存储购买的交易信息,可以在另一个查询
  • 中加入。
  • uniq_key -这可以是一个用于票证检索的url字符串,使用uniqid构建或与md5散列。你可以在SO上找到很多生成guid的好方法。
  • used -一个布尔值,表示票据是否已下载。购买时,此值默认为0 (false),下载后更新为1 (true)。
  • 时间戳-你可以设置在检索时更新的时间戳

对于像这样的应用程序,一些开发人员宁愿删除行而不是布尔值,但这取决于存档该数据是否与您的业务逻辑相关。一般来说,你可以从安全的角度考虑,保留数据并将其无效化为bool。

在购买时,您可以插入到事务表和票证表中,为购买者数据创建新行,同时插入新票证。您还需要设置一些检索票证的方法,或者使用url路由和通过电子邮件发送的$_GET超全局变量,或者使用一些这样的方法。

输出票据下载的端点必须首先查询布尔值为false的唯一id,并且返回一行,允许下载,然后运行另一个UPDATE查询,然后将使用的布尔值设置为true。如果没有返回任何行(无效id或已检索到票据),则拒绝下载。

通过header()函数设置mime类型和Content-Disposition报头,可以直接将下载的内容输出到浏览器。理想情况下,所有这些逻辑都可以在一个输出端点中。

如果你还没有使用一些框架,我建议你寻找一些东西,至少为你设置url路由,使生活更容易。Kohana、CodeIgniter和CakePHP都非常适合这个问题领域。

还要考虑业务逻辑的需求——真的有必要只允许一次下载吗?如果门票有一些独特的标识符,如序列号或uniqid(),当门票可以在兑换时验证时,真的有必要限制这样的下载吗?我不知道你的要求,但我知道,如果我把票忘在离合器上,ticketmaster不让我再下载一次,我会很生气的:)

好运。