php - 创建具有到期时间的唯一链接(一次点击)

标签 php

<分区>

我想为我的时事通讯创建唯一链接(一次点击)。

看步骤:

  1. 我将创建一个链接,或者可以是一个将创建链接的脚本 http://www.example.com/page.php?unique=email@email.com

  2. 我的订阅者将收到包含此链接的时事通讯。

  3. 他们点击/访问此时事通讯/链接。

  4. 如果他们想再次访问,他们不能,链接将过期,订阅者将被重定向到其他页面 http://www.example.com/expired.php

那么有机会创造这个吗?如何实现?

我有这个代码

<?php

    include("variables.php");

    $password = trim($_SERVER['QUERY_STRING']);

    if($password == ADMIN_PASSWORD) {
        // Create a new key
        $new = uniqid('key',TRUE);

        if(!is_dir('keys')) {
            mkdir('keys');
            $file = fopen('keys/.htaccess','w');
            fwrite($file,"Order allow,deny\nDeny from all");
            fclose($file);
        }

        $file = fopen('keys/keys','a');
        fwrite($file,"{$new}\n");
        fclose($file);
?>

这个脚本位于一个名为 generate.php 的文件中,如果我访问这个 url(http://www.example.com/generate.php?1234 - 1234 是生成唯一 ID 的密码)将生成一个像这样的唯一链接 http://www.example.com/page.php?key525e1200e3a5f9.19949496那将只有 1 次可用!

现在我想要的是访问http://www.example.com/generate.php?1234&s=email@email.com

这会生成一个唯一链接 http://www.example.com/page.php?key525e1200e3a5f9.19949496&s=email@email.com

这是一个 protected 下载页面!我需要将用户电子邮件添加到下载页面,这将通过链接生成。 's' 是下载页面使用 $_GET['s'] 获取的变量

明白我的意思吗?

最佳答案

我会使用那里的电子邮件来做到这一点。

然后用下面的语句做一个PHP页面。 请求 GET(在本例中为电子邮件地址)并检查它是否存在于数据库表中(我们称之为 - hasvisited)。

如果存在,则重定向到您想要的页面。

如果不存在则... 1.) 将其添加到数据库。 2.) 显示 1 次页面。

当第 1 步发生时。它将阻止用户再次访问。

如果您想将此限制为一组特定用户 - 正如上述解决方案一样,人们理论上可以输入任何内容来通过此...

我已经创建了包含用户的表,并在名为“访问”的列上执行 IF 状态,如果 1 或更少允许,则将 +1 添加到访问列。如果超过 1 次访问,则重定向。

我希望这是有道理的 - 使用 PHP、MySQL DB 和简单的 IF 语句实现起来也应该相当简单。

关于php - 创建具有到期时间的唯一链接(一次点击),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19384847/

相关文章:

php preg_match 日期格式 "yyyy-MM"

php - MySQL FIND_IN_SET OR IN 仅适用于第一个整数?

php - Web 浏览器上的日语字符编码问题

php - 根据用户在一个共享站点结构中的位置提供独特的内容(不是翻译)。 (PHP/MySQL)

PHP PDO bindParam/bindValue 多次

php - 在 Chrome 的 HTML5 视频标签中通过 php 播放 mp4 文件?

php - 检查类是否具有用 PHPUnit 定义的常量的正确方法

php - 循环遍历数据库表数据并以正确的格式显示它

php - 使用 Ajax 和 PHP 进行数据输出

php 挑战 : parse pseudo-regex