Hallo!
Nicht nur die Rechtschreibung ist bei u-Danilo schlecht, sondern auch die Idee!
Ich würd' es so machen, wie es Fatalus bereits vorgeschlagen hat.
Um das Ganze sicherer zu machen, kannst du den Parameter mit md5() verschlüsseln, sodass den keiner ändern kann.
Das solltest du aber natürlich nicht mit einem statischen Wert machen, da die Verschlüsselung ja sonst nichts nützt.
Hier mal ein Beispiel:
Hauptfenster:
PHP:
<?php
session_start();
$_SESSION['linkid'] = md5(microtime());
echo "<a href=\"javascript:openwindow('link.php?linkid=$_SESSION[linkid]&".session_name()."=".session_id."\">link</a>";
?>
Das geöffnete Fenster:
PHP:
session_start();
if ($_GET['linkid'] != $_SESSION['linkid'])
die ('kein Zutritt!');
//weiterer Seiteninhalt
Das bewirkt, dass die Seite nur einmal und auch nur mit einer gültigen Session geöffnet werden kann.
Es könnte nun aber immernoch jemand den Quelltext deiner Seite begutachten und den Link einfach so aufrufen!
Um das zu verhindern, könnte man eine Seite "dazwischen schalten".
Damit meine ich, dass du in dem Fenster, dass geöffnet wird einfach eine Weiterleitungs-Seite aufrufst, die als ZUSÄTZLICHEN Parameter zum Beispiel
ubergibt.
Dechex mache ich, damit dass nicht sofort offensichtlich ist, dass das ein Timestamp ist.
Und in der nächsten Seite überprüfst du einfach, ob die Zeit die übergeben wurde zum einen mit der in der Session gespeicherten Zeit übereinstimmt (was du natürlich noch extra machen müsstest) und zum anderen, ob die aktuelle der Link zum Beispiel in den letzten 2 sekunden aufgerufen wurde.
Das ist zwar nicht 100%ig, aber wer kann schon einen Link in 2 Sekunden heraus finden und den auch gleich aufrufen?
Und ich würde deswegen eine extra Zwischenseite einbauen, da man ja nicht davon ausgehen kann, dass der Link (javascript:window.open()) sofort aufgerufen wird.
Wurde aber erst einmal auf den Link geklickt, lässt sich doch behaupten, dass die Weiterleitung innerhalb der gesetzten Zeit eintritt.
Beispiel:
Hauptfenster:
PHP:
<?php
session_start();
$_SESSION['linkid'] = md5(microtime());
echo "<a href=\"javascript:openwindow('weiterleitung.php?linkid=$_SESSION[linkid]&".session_name()."=".session_id."\">link</a>";
?>
Weiterleitung.php:
PHP:
session_start();
if ($_GET['linkid'] != $_SESSION['linkid'])
die ('kein Zutritt!');
$_SESSION['newlinkid'] = md5(microtime());
$_SESSION['linktime'] = dechex(time());
header ("Location: link.php?newlinkid=$_SESSION[newlinkid]");
Link.php
PHP:
session_start();
if (($_GET['linkid'] != $_SESSION['linkid']) || ($_GET['linktime'] != $_SESSION['linktime']) || (hexdec($_SESSION['linktime'] < (time()-2)))
die ('kein Zutritt!');
//weiterer Seiteninhalt