如何在用户访问页面后使页面过期?

时间:2013-10-17 03:31:03

标签: php

我有一个页面http://www.mysite.com/newsletter.php

现在,当我向您发送电子邮件并且您访问此页面以查看您的电子邮件/用户名时,我想在其中添加变量。

所以我通过电子邮件向您发送此链接http://www.mysite.com/newsletter.php?user=email@email.com

现在,当您访问此链接时,您将在该页面上看到您的电子邮件/用户名为“Hello email@email.com,查看新博客”

我用

在该页面上写了用户名/电子邮件
<?php echo $_GET['user']; ?>

现在,您如何在访问此页面后使其过期?我的意思是我只想访问它一次!

*的 EDITED

查看我已使用的代码,以生成过期的唯一链接:

<?php

    include("variables.php");

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

    if($password == ADMIN_PASSWORD) {
        $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);
?>

<html>
    <head>
        <title>Page created</title>
        <style>
            nl { 
                font-family: monospace 
            }
        </style>
    </head>
    <body>
        <h1>Page key created</h1>
        Your new single-use page link:<br>
        <nl>
        <?php 
            echo "http://" . $_SERVER['HTTP_HOST'] . DOWNLOAD_PATH . "?" . $new; 
        ?></nl>
    </body>
</html>

<?php
    } else {

        header("HTTP/1.0 404 Not Found");
    }
?>`

此代码也会在36小时后过期,并由variables.php

设置
<?

    define('PROTECTED_DOWNLOAD','download.php');

    define('DOWNLOAD_PATH','/.work/page.php');

    define('SUGGESTED_FILENAME','download-doc.php');

    define('ADMIN_PASSWORD','1234');

    define('EXPIRATION_DATE', '+36 hours');

    header("Cache-Control: no-cache, must-revalidate");
    header("Expires: ".date('U', strtotime(EXPIRATION_DATE)));

?>

此php文件生成如下链接:http://www.mysite.com/page.php?key1234567890 现在如何在uniqid旁边添加变量user=email@email.com以生成如下链接: page.php?key1234567890&amp; user=email@email.com 以获取电子邮件@ email .com由<?php echo $_GET['user']; ?>在下一页。

抱歉我的英语不好。

5 个答案:

答案 0 :(得分:4)

将状态变量存储在数据库中,当您访问该页面时,将该电子邮件与存储在目前为止有0次访问的数据库中的电子邮件进行比较,将状态变量更新为显示visited = 1,下次再次显示打开url,查看状态变量,从1开始,不要显示该页面。

答案 1 :(得分:1)

如果您想避免与数据库交互,您还可以创建一个cookie,然后在有人导航到http://www.mysite.com/newsletter.php时查看cookie。唯一的问题是,当用户清除他/她的cookie时,页面将再次出现。

答案 2 :(得分:1)

试试这个:

您只能安全地使用数据库更新机制执行此操作。 将数据库字段设置为0默认值,并在用户访问该页面后将其设为1。

例如,

在某些网站中,您可以在忘记密码链接页

中找到这些选项

答案 3 :(得分:0)

另一个选项是使用客户端缓存。我们可以在用户第一次访问时保存cookie,在下次访问时我们可以检查用户是否先前访问并显示他的消息。 http://plugins.jquery.com/project/Cookie

答案 4 :(得分:0)

只需在K中添加一个额外的列。这将存储页面的状态。当用户访问您的页面时。只需更改状态即可。并且不允许状态更改的页面。您可以轻松地在数据库查询中进行微小更改。这将消除使用sessioncookies维护的大量负担。