Voor een bepaalde website die nog in de testfase zit heb ik een bepaalde oplossing die betaalde toegang tot een website afhandelt. Deze werkt wel in FF/IE maar niet in Opera. Ik ben er inmiddels achter dat het komt doordat Opera de pagina in de cache zet, waardoor de oplossing alleen de eerste keer correct werkt. De tweede keer haalt Opera de pagina uit cache waardoor de zaak fout loopt en de bezoeker geen toegang krijgt terwijl deze hier wel recht toe heeft.
Wat ik nu dus wil doen is voorkomen dat bepaalde pagina's in de cache van opera terechtkomen. Het gaat om zowel een html als een php pagina. De html pagina betreft een frameset waarin de php-pagina inzit:
De php-pagina kijkt of de gebruiker nog toegang heeft en ziet er zo uit:
Het probleem is dus dat beide pagina's in de cache van Opera terechtkomen. Opera haalt dan wanneer dezelfde bezoeker voor de tweede keer de pagina bezoekt de pagina uit de cache waarbij de bezoeker geen toegang meer heeft. Hierdoor heeft de bezoeker bij een tweede bezoek dus direct geen toegang en gaat meteen naar 'verbroken.php' (tenzij tussendoor de cache is leeggegooid, maar goed daar mag je niet vanuit gaan natuurlijk).
Dus hoe voorkom ik nou dat de pagina's gecached worden, zodat de check altijd goed gaat?
Ik heb:
<META HTTP-EQUIV="pragma" CONTENT="no-cache">
en
<META HTTP-EQUIV="expires" CONTENT="Tue, 31 Dec 2003 23:00:00 GMT"> (zomaar een datum in het verleden genomen)
al geprobeerd maar deze geven niet het gewenste resultaat. Ik krijg dan zelfs een hele witte pagina te zien bij een tweede bezoek.
Wat ik nu dus wil doen is voorkomen dat bepaalde pagina's in de cache van opera terechtkomen. Het gaat om zowel een html als een php pagina. De html pagina betreft een frameset waarin de php-pagina inzit:
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> |
De php-pagina kijkt of de gebruiker nog toegang heeft en ziet er zo uit:
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
40
41
42
43
44
45
46
| <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<?
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)
{
echo "<script>window.parent.location='../verbroken.php';</script>";
}
}
?>
</body>
</html> |
Het probleem is dus dat beide pagina's in de cache van Opera terechtkomen. Opera haalt dan wanneer dezelfde bezoeker voor de tweede keer de pagina bezoekt de pagina uit de cache waarbij de bezoeker geen toegang meer heeft. Hierdoor heeft de bezoeker bij een tweede bezoek dus direct geen toegang en gaat meteen naar 'verbroken.php' (tenzij tussendoor de cache is leeggegooid, maar goed daar mag je niet vanuit gaan natuurlijk).
Dus hoe voorkom ik nou dat de pagina's gecached worden, zodat de check altijd goed gaat?
Ik heb:
<META HTTP-EQUIV="pragma" CONTENT="no-cache">
en
<META HTTP-EQUIV="expires" CONTENT="Tue, 31 Dec 2003 23:00:00 GMT"> (zomaar een datum in het verleden genomen)
al geprobeerd maar deze geven niet het gewenste resultaat. Ik krijg dan zelfs een hele witte pagina te zien bij een tweede bezoek.