我有一个消息"我的秘密消息",我将在html或php页面上键入。 myexample.com/secretlink.html
我怎么能使它,当有人访问我的页面一个定时器可能与JS将开始(简单的部分),但当定时器是它激活破坏页面或编辑它的代码,之后它试图重新加载页面,现在不存在或不包含我的消息。
我在Stackoverflow上发现的唯一类似的东西是"网站自毁从浏览器栏"
这是一个可能的解决方案:将消息存储在一个SQL表中。然后,让消息在某个PHP页面上可用,比如example.com/?qid=12345
。
当用户请求该页时,将在数据库中的该消息上设置一个标志,表示该消息已被查看。然后,当计时器用完时,重定向到一个删除页面,该页面将销毁数据库行并重定向它们(或告诉它们该行已过期)。
最后,如果页面被请求,并且表示页面已被查看的标志设置为already,则只需销毁该消息并声明它已被声明。
或者,如果您希望它只是在一定时间后超时,您可以在数据库中添加一个"first_viewed_at" DATETIME字段,如果它在过去太久,则会导致脚本销毁消息。
添加以下"。Htaccess"文件,它将重写任何.html请求以添加-删除.php。页面add-delete.php将处理实际的页面删除请求。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+).html$ add-delete.php?request=%{REQUEST_URI} [L,QSA]
</IfModule>
然后让add-delete.php要求文件,然后unlink()它。要了解更多关于unlink的信息,请访问http://php.net/manual/en/function.unlink.php。delete-page.php文件如下所示:
<?php
// add check to prevent abuse
require($_GET["request"]);
unlink($_GET["request"]);
?>
然而,我可能会让文件保持几分钟,以防他们点击刷新。在这种情况下,我会将clean请求文件名插入MySQL数据库表中。
$db->bind("request",$_GET["request"]);
$db->query("INSERT INTO `delete_pages` (`page_name`) VALUES (:request);");
然后要求文件。然后添加一个Crono事件来运行PHP脚本,该脚本通过对每个结果运行unlink来删除表中的所有文件名。
$results = $db->query("SELECT `page_id`, `page_name` FROM `delete_pages` WHERE `timestamp` > NOW() - INTERVAL 1 MINUTE); // leave up for 1 or unlink asap
foreach($result as $row){
unlink($row["page_name"]);
$db->bind("page_id",$row["page_id"];
$db->query("DELETE FROM `delete_pages` WHERE `page_id` = :page_id");
}
如果你真的想用Javascript来做你可以做一个定时器然后发送一个xmlhttp请求到服务器
<script>
window.onload = function(page_name) {
xmlhttp = new XMLHttpRequest(); xmlhttp.open("GET","delete-page.php?page="+page_name, false); xmlhttp.send(null); document.getElementById("delete-update").value=xmlhttp.responseText; }
</script>
https://jsfiddle.net/68733393/
在页面加载时启动一个函数,它会在一段时间后擦除你的秘密。
<div id='secret'>
I am secret
</div>
setTimeout(function(){
document.getElementById('secret').innerHTML = '';
}, 1000)