2016-08-23 2 views
-3

Ich habe eine Nachricht "meine geheime Nachricht", die ich auf einer HTML-oder PHP-Seite eingeben werde. myexample.com/secretlink.htmlCode eine Webseite zu Selbstzerstörung nach angesehen

Wie kann ich es, dass, wenn jemand meine Seite ein Timer vielleicht mit JS-Zugriffe werden (einfache Teil) starten, aber wenn Timer abgelaufen ist aktiviert es einen Code, der die Seite oder vielleicht zerstört bearbeitet es, danach versucht es die Seite neu zu laden, die jetzt nicht existiert oder meine Nachricht nicht enthält.

Das Einzige, was ich auf Stackoverflow ähnlich wie diese gefunden wurde „Website Self Destruct from Browser Bar

+2

Datenbank + AJAX-Aufruf + Zeitstempelfeld. – ceejayoz

+2

Nur einen Ajax-Anruf dienen. Der Server verfolgt, ob Sie eine Nachricht erhalten oder nicht. – Jecoms

Antwort

1

Hier ist eine mögliche Lösung: Speichern Sie die Nachricht in einer SQL-Tabelle. Stellen Sie die Nachricht dann auf einer bestimmten PHP-Seite zur Verfügung, z. B. example.com/?qid=12345.

Wenn der Benutzer die Seite anfordert, wird für diese Nachricht in der Datenbank ein Flag gesetzt, das besagt, dass sie angezeigt wurde. Wenn der Zeitgeber dann abgelaufen ist, leiten Sie ihn auf eine Löschseite um, die die Datenbankzeile zerstört und sie umleitet (oder ihnen sagt, dass sie abgelaufen ist).

Schließlich, wenn die Seite angefordert wird, und die Flagge sagen, dass es bereits eingestellt wurde, können Sie nur die Nachricht zerstören und sagen, dass es bereits beansprucht wurde.

Wenn Sie möchten, dass es nur nach einer gewissen Zeit abläuft, können Sie einfach ein DATETIME-Feld "first_viewed_at" in die Datenbank einfügen, das das Skript zerstört, wenn es zu weit in der Vergangenheit liegt die Nachricht.

+0

Danke, das ist perfekt – Sammy7

0

https://jsfiddle.net/68733393/

beim Laden der Seite nur eine Funktion starten, die Ihr Geheimnis nach einiger Zeit gelöscht werden.

+0

Dies wird immer noch angezeigt "Ich bin geheim" jedes Mal, wenn die Seite geladen wird – Krease

+0

Oh ich muss missverstanden haben, kann ich nicht sagen, ob die Nachricht nur einmal oder auf jeder Seite von der geladen werden soll OP. Ich dachte mir, dass das "Neuladen der Seite" ein Irrglaube gewesen sein könnte, dass man eine Seite neu laden muss, um Inhalt verschwinden zu lassen, wenn ein einfaches JS das tun würde. –

+0

@AlexeiDarmin Ja, ich möchte, dass es für immer gelöscht wird, wenn sie also versuchen, die Seite neu zu laden, kommt nichts. – Sammy7

1

Fügen Sie die folgende ".htaccess" -Datei hinzu, die alle .html-Anforderungen zu add-delete.php neu schreibt. Die Seite add-delete.php behandelt die aktuelle Anforderung zum Löschen der Seite.

<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.+)\.html$ add-delete.php?request=%{REQUEST_URI} [L,QSA] 
</IfModule> 

Dann haben die add-delete.php die Datei erfordern und dann aufheben() es. Um mehr über Unlink zu erfahren, gehen Sie zu http://php.net/manual/en/function.unlink.php. Die Lösch-page.php Datei würde wie folgt aussehen:

<?php 
// add check to prevent abuse 
require($_GET["request"]); 
unlink($_GET["request"]); 
?> 

Allerdings würde ich wahrscheinlich die Datei für ein paar Minuten überlassen, nur für den Fall, dass sie refresh getroffen. In diesem Fall würde ich den Dateinamen der sauberen Anfrage in eine MySQL-Datenbanktabelle einfügen.

$db->bind("request",$_GET["request"]); 
$db->query("INSERT INTO `delete_pages` (`page_name`) VALUES (:request);"); 

Dann benötigen Sie die Datei. Fügen Sie dann ein Crono-Ereignis hinzu, um ein PHP-Skript auszuführen, das alle Dateinamen in der Tabelle löscht, indem bei jedem Ergebnis eine Verknüpfung aufgehoben wird.

$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"); 
} 

Wenn Sie wirklich wollte es mit Javascript tun, könnten Sie ein Timer zu tun haben, als eine xmlhttp Anfrage an die Hoffnung

<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> 

Sever sende ich das hilft.

+0

Ich habe nichts dagegen, das Nachladen und die zweite Version ist ein bisschen schwieriger. Können Sie ein Update schreiben, wie das .htaccess-Beispiel funktioniert? Danke – Sammy7

+0

Wie genau kann ich es "aufheben"? – Sammy7

+0

http://php.net/manual/en/function.unlink.php – mrheroux

Verwandte Themen