Voor een bepaalde website die nog in de testfase zit heb ik een bepaalde oplossing die betaalde toegang tot een website afhandelt. Dit werkt op zich goed, maar wanneer de gebruiker geen toegang meer heeft stuur ik deze momenteel naar een ander scherm met behulp van JS redirect. Dit is natuurlijk een beveiligingsrisico want als iemand tussentijds JS heeft uitgeschakeld werkt de redirect niet en houdt men toegang. Ik zou daarom de redirect graag met de Header functie doen, maar dit krijg ik niet voor elkaar.
Ik maak gebruik van de volgende pagina (check.php) het recht op toegang controleert (hier heb ik de header functie al in staan ipv de JS redirect):
Deze pagina bevindt zich in het eerste frame van deze pagina:
In het tweede frame bevindt zich de pagina waarvan de toegang geblokkeerd wordt als check.php constateert dat er geen recht op toegang meer is. Zoals te zien is wordt er vanuit check.php geen output gestuurd. Als ik bovenstaande oplossing echter draai krijg ik zo gauw check.php de header functie laat uitvoeren toch de melding
Warning: Cannot modify header information - headers already sent by (output started at .../check.php:7)
Ik heb zelf het idee dat dit komt doordat check.php in een frame zit, en dat het frame op zich ook als output gezien wordt. Of heb ik dit verkeerd en is het toch mogelijk om binnen frames gebruik te maken van header (en wel zodanig dat de nieuwe pagina in het hele venster geladen wordt en dus niet binnen het frame waarin de header functie wordt aangeroepen)???
Bedankt!!
Ik maak gebruik van de volgende pagina (check.php) het recht op toegang controleert (hier heb ik de header functie al in staan ipv de JS redirect):
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
| <?php header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); header("Cache-Control: no-store, no-cache, must-revalidate"); header("Pragma: no-cache"); error_reporting(E_ALL); $REMOTE_ADDR=$_SERVER[REMOTE_ADDR]; $htaccess_file = '.htaccess'; // .htaccess file set_time_limit(0); // Controleren of ip nog toegang heeft function IPCheck($ip) { global $htaccess_file; if($htaccess_file=='') return true; $ip_allowed= strtolower(join(' ',file($htaccess_file))); $ip_okay = strpos($ip_allowed, "allow from $ip") ? 1:0; return $ip_okay; } //kijken of ip uberhaupt toegang heeft $okay =IPCheck($REMOTE_ADDR); while($okay) { if($htaccess_file && (time()!=$last_time)) { //Elke seconde controleren $last_time=time(); $okay=IPCheck($REMOTE_ADDR); } if($okay == 0) { header("location: http://www.mijnpagina.nl/verbroken.php"); } } ?> |
Deze pagina bevindt zich in het eerste frame van deze pagina:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd"> <html> <head> <title>Toegang tot alle films en foto's!</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head> <frameset rows="0,*"" frameborder="NO" border="0" framespacing="0"> <frame src="check.php" name="top"> <frame src="index2.htm" name="main"> </frameset> </script> <noframes><body> </body></noframes> </html> |
In het tweede frame bevindt zich de pagina waarvan de toegang geblokkeerd wordt als check.php constateert dat er geen recht op toegang meer is. Zoals te zien is wordt er vanuit check.php geen output gestuurd. Als ik bovenstaande oplossing echter draai krijg ik zo gauw check.php de header functie laat uitvoeren toch de melding
Warning: Cannot modify header information - headers already sent by (output started at .../check.php:7)
Ik heb zelf het idee dat dit komt doordat check.php in een frame zit, en dat het frame op zich ook als output gezien wordt. Of heb ik dit verkeerd en is het toch mogelijk om binnen frames gebruik te maken van header (en wel zodanig dat de nieuwe pagina in het hele venster geladen wordt en dus niet binnen het frame waarin de header functie wordt aangeroepen)???
Bedankt!!