Vaag probleem met cookies
Het enige waar een lijn in te trekken lijkt is het besturingssysteem, de computers die ik heb gevonden waar de boel niet werkt zijn allemaal vista (2). Maar naar het schijnt werkt het ook niet op andere systemen. Met de cookie instellingen heeft het niets te maken, aangezien andere websites die cookies gebruiken wel werken op deze 2 vista computers.
Het gaat over deze website:
http://www.helicon.be, om in te loggen moet je op het logo klikken.
Hier is de relevante code:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
if(isset($_POST['submit'])){
$ww=md5($_POST['ww']);
include("dblogin.php");
$query="SELECT * FROM ww WHERE ww='$ww'";
$result=mysql_query($query)or die("Fout bij het uitvoeren van de wachtwoordquery");
$num=mysql_num_rows($result);
mysql_close();
if($num=="0"){
header("Location: http://www.helicon.be/menu/fout_ww.htm");
exit;
}elseif($num>1){
echo "This website is protected against hackers";
}elseif($num==1){
$naam=mysql_result($result,0,"naam");
$ww=mysql_result($result,0,"ww");
$url=mysql_result($result,0,"url");
setcookie('naam',$naam);
setcookie('ww',$ww);
echo "Wachtwoord is OK, aanmelden...";
echo '<script>window.top.location="'.$url.'";</script>';
}
}
?>
if(isset($_POST['submit'])){
$ww=md5($_POST['ww']);
include("dblogin.php");
$query="SELECT * FROM ww WHERE ww='$ww'";
$result=mysql_query($query)or die("Fout bij het uitvoeren van de wachtwoordquery");
$num=mysql_num_rows($result);
mysql_close();
if($num=="0"){
header("Location: http://www.helicon.be/menu/fout_ww.htm");
exit;
}elseif($num>1){
echo "This website is protected against hackers";
}elseif($num==1){
$naam=mysql_result($result,0,"naam");
$ww=mysql_result($result,0,"ww");
$url=mysql_result($result,0,"url");
setcookie('naam',$naam);
setcookie('ww',$ww);
echo "Wachtwoord is OK, aanmelden...";
echo '<script>window.top.location="'.$url.'";</script>';
}
}
?>
Op de pagina wordt dan nagekeken of er een cookie is gemaakt:
Code (php)
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
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
<?php
function secu($type){
$naam=$_COOKIE['naam'];
$ww=$_COOKIE['ww'];
$num="0";
switch($type){
case"leden":
if($naam=="leden"){
include("dblogin.php");
$query="SELECT * FROM ww WHERE naam='$naam' AND ww='$ww'";
$result=mysql_query($query)or die("Fout bij het uitvoeren van de wachtwoordquery");
$num=mysql_num_rows($result);
mysql_close();
}
break;
case"bestuur":
if($naam=="bestuur"){
include("dblogin.php");
$query="SELECT * FROM ww WHERE naam='$naam' AND ww='$ww'";
$result=mysql_query($query)or die("Fout bij het uitvoeren van de wachtwoordquery");
$num=mysql_num_rows($result);
mysql_close();
}
break;
}
if($num=="0"){
$secu=false;
}elseif($num>1){
$secu=false;
}elseif($num==1){
$secu=true;
}
return $secu;
}
if(!secu("leden")){
echo "This website is protected against hackers";
echo '<script>window.top.location="http://www.helicon.be/index.htm";</script>';
exit;
}
?>
function secu($type){
$naam=$_COOKIE['naam'];
$ww=$_COOKIE['ww'];
$num="0";
switch($type){
case"leden":
if($naam=="leden"){
include("dblogin.php");
$query="SELECT * FROM ww WHERE naam='$naam' AND ww='$ww'";
$result=mysql_query($query)or die("Fout bij het uitvoeren van de wachtwoordquery");
$num=mysql_num_rows($result);
mysql_close();
}
break;
case"bestuur":
if($naam=="bestuur"){
include("dblogin.php");
$query="SELECT * FROM ww WHERE naam='$naam' AND ww='$ww'";
$result=mysql_query($query)or die("Fout bij het uitvoeren van de wachtwoordquery");
$num=mysql_num_rows($result);
mysql_close();
}
break;
}
if($num=="0"){
$secu=false;
}elseif($num>1){
$secu=false;
}elseif($num==1){
$secu=true;
}
return $secu;
}
if(!secu("leden")){
echo "This website is protected against hackers";
echo '<script>window.top.location="http://www.helicon.be/index.htm";</script>';
exit;
}
?>
Is er iemand die ziet waar het aan kan liggen?
Alvast bedankt!
Helemaal niemand?
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
if($num=="0"){
$secu=false;
}elseif($num>1){
$secu=false;
}elseif($num==1){
$secu=true;
}
$secu=false;
}elseif($num>1){
$secu=false;
}elseif($num==1){
$secu=true;
}
==
En heb je het al uitgebreid gedebugged?
Door alle verwerkingen weer te geven op het scherm enz, zoals uitlezen cookies enz.
Gewijzigd op 01/01/1970 01:00:00 door Jelle Posthuma
Edit:
Jelle Posthuma schreef op 13.10.2008 10:35:
Zo is het nog korter. ;-)
Gewijzigd op 01/01/1970 01:00:00 door - SanThe -
@SanThe: hij geeft geen error, hij doet ook gewoon zijn werk. Het resultaat van de query, en dus ook de data zitten opgeslagen in $result, de link met de database is dus niet meer nodig (zo heb ik het toch begrepen, en blijkbaar is het niet verkeerd, want voor ongeveer de helft van de bezoekers werkt het)
Edit:
Ik heb geprobeerd het te veranderen en de mysql_close(); van plaats te veranderen, maar dit lost het probleem niet op.
Gewijzigd op 01/01/1970 01:00:00 door Hans Vereyken
Haal regel 8 gewoon weg. Dan weet je zeker dat het moet werken.
Het probleem zat in het gebruik van verschillende servers voor dezelfde website:
Na wat ronddwalen op internet vond ik dit in de Apple Mailing Lists:
Quote:
Hi Christiaan,
Am Mittwoch, 28.04.04, um 07:01 Uhr (Europe/Berlin) schrieb Christiaan Knol <email@hidden>:
OK, I am now trying this without cookies after a quick read-up of
session variables. However I still can't seem to get it to work.
Even though you've given up on cookies I'd like to add a few comments on that subject:
1. Most browsers allow the user to configure not to accept cookies. So possibly this is the case on your windows testing machine.
2. I have used cookies with PHP and they worked fine in all browsers including Windows IE 6. (Subject to my remark above.)
3. A browser may refuse to accept a cookie if the domain doesn't match that of the current page URL. Again this depends on the users configuration. So if your cookie is coming from a different server than the rest of the web page that might be the problem.
4. Since cookies are set during the HTTP request you need to make sure that the HTTP headers have not been sent yet when setting the cookie. Either send it before the first byte of the page content or use output buffering to catch the page output and sent the buffer at the end of your script. Use the PHP function headers_sent() in your debug code to verify that they have not been sent just before setting the cookie.
5. After setting the cookie you should get it back from the browser with the NEXT request. So setting a cookie and expecting to see it to be set on the same page immediatly (during "this" script execution) is a wrong assumption. The transaction goes something like this:
Browser: GET some/url -> Server
Server: Set cookie A, send page -> Browser
Browser: GET some/other/url, send along cookie A -> Server
Server: Do something with cookie A, send page -> Browser
6. I use $_COOKIE since the $HTTP_COOKIE_VARS is no longer recommended. See <http://us2.php.net/manual/en/function.setcookie.php> for info. Works fine for me.
7. Cookies can be very useful in conjuction with sessions. Without cookies you need to pass the session id around in the url which looks kind of ugly. With cookies you can transport it invisibly.
8. Cookies are fragile. They are not always available, they can de deleted by the user or they can even be forged, and storage for cookies in the browser may be limited. So think about what you store in a cookie and have a fallback method ready if they fail. Also you might employ some sort of encryption to make forgery harder and you might want to do some additional checks on security sensitive data to avoid someone taking over a session for example. (Note: All this applies to session IDs and other sensitive data in urls as well.)
Am Mittwoch, 28.04.04, um 07:01 Uhr (Europe/Berlin) schrieb Christiaan Knol <email@hidden>:
OK, I am now trying this without cookies after a quick read-up of
session variables. However I still can't seem to get it to work.
Even though you've given up on cookies I'd like to add a few comments on that subject:
1. Most browsers allow the user to configure not to accept cookies. So possibly this is the case on your windows testing machine.
2. I have used cookies with PHP and they worked fine in all browsers including Windows IE 6. (Subject to my remark above.)
3. A browser may refuse to accept a cookie if the domain doesn't match that of the current page URL. Again this depends on the users configuration. So if your cookie is coming from a different server than the rest of the web page that might be the problem.
4. Since cookies are set during the HTTP request you need to make sure that the HTTP headers have not been sent yet when setting the cookie. Either send it before the first byte of the page content or use output buffering to catch the page output and sent the buffer at the end of your script. Use the PHP function headers_sent() in your debug code to verify that they have not been sent just before setting the cookie.
5. After setting the cookie you should get it back from the browser with the NEXT request. So setting a cookie and expecting to see it to be set on the same page immediatly (during "this" script execution) is a wrong assumption. The transaction goes something like this:
Browser: GET some/url -> Server
Server: Set cookie A, send page -> Browser
Browser: GET some/other/url, send along cookie A -> Server
Server: Do something with cookie A, send page -> Browser
6. I use $_COOKIE since the $HTTP_COOKIE_VARS is no longer recommended. See <http://us2.php.net/manual/en/function.setcookie.php> for info. Works fine for me.
7. Cookies can be very useful in conjuction with sessions. Without cookies you need to pass the session id around in the url which looks kind of ugly. With cookies you can transport it invisibly.
8. Cookies are fragile. They are not always available, they can de deleted by the user or they can even be forged, and storage for cookies in the browser may be limited. So think about what you store in a cookie and have a fallback method ready if they fail. Also you might employ some sort of encryption to make forgery harder and you might want to do some additional checks on security sensitive data to avoid someone taking over a session for example. (Note: All this applies to session IDs and other sensitive data in urls as well.)
Het gaat mij hier vooral om punt 3, dit is bij de website van helicon het geval.
In het geval van Helicon staat de website op de server die ook het domein helicon.be beheert, vanaf het moment dat iemand probeert in te loggen worden in bepaalde iframes pagina's geladen van een andere server, die van mij (artexanis.be), via deze pagina's worden dan de cookies gemaakt, deze kunnen dus geweigerd worden. (de index die de iframes bevat staat op helicon.be, de pagina die het loginscript bevat staat op artexanis.be en wordt weergegeven in een iframe van de index die dus op helicon.be staat...)
Na het verplaatsen van de index naar mijn server werkt alles bij iedereen. Nu moet ik het nog online zetten, maar dat lukt me wel.
In ieder geval bedankt!
Gewijzigd op 01/01/1970 01:00:00 door Hans Vereyken